excel - 使用 WPF (OLEDB) 在 Excel 中保存序列号
问题描述
我在 WPF 中的应用程序允许用户将文本框中的一些数据保存到 Excel 文件中(使用 OLEDB 连接)。我希望添加一个功能,即每次将新行保存到 Excel 文件中时,都会将序列号添加到该 Excel 文件的 EventID 列中。
但是我在运行与参数@EventId 相关的应用程序时遇到错误:“参数没有默认值”。我希望我写了错误的 sql1 命令来生成序列号。
我会很感激你的帮助。
private void btnSaveNewEvent1_Click_1(object sender, RoutedEventArgs e)
{
object eventName = txtEventName.Text;
object typeValue = txtEventType.Text;
object nameValue = txtAttributeName.Text;
object attribvValue = txtAValue.Text;
object descValue = txtEventDescrip.Text;
System.Data.OleDb.OleDbConnection MyConnection;
System.Data.OleDb.OleDbCommand myCommand = new System.Data.OleDb.OleDbCommand();
System.Data.OleDb.OleDbCommand myCommand1 = new System.Data.OleDb.OleDbCommand();
String sql = null;
String sql1 = null;
MyConnection = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source='excel_file\\events2.xlsx'; " +
"Extended Properties=\"Excel 12.0 Xml;HDR=YES;\"");
try
{
//SQL STATEMENT TO SAVE INSERTED BY THE USER VALUES FROM THE TEXT BOXES
//SQL1 STATEMENT TO GENERATE EVENTID NUMBER EACH TIME THE USER SAVES NEW ROW OF DATA
MyConnection.Open();
myCommand.Connection = MyConnection;
sql = "Insert into [events$] (EventID,EventName, Type, Name, [Value], Description) values(@EventID,@EventName,@Type,@Name,@Val,@Desc)";
myCommand.CommandText = sql;
myCommand.Parameters.AddWithValue("@EventID",sql1);
myCommand.Parameters.AddWithValue("@EventName", eventName ?? DBNull.Value);
myCommand.Parameters.AddWithValue("@Type", typeValue ?? DBNull.Value);
myCommand.Parameters.AddWithValue("@Name", nameValue ?? DBNull.Value);
myCommand.Parameters.AddWithValue("@Val", attribvValue ?? DBNull.Value);
myCommand.Parameters.AddWithValue("@Desc", descValue ?? DBNull.Value);
myCommand1.Connection = MyConnection;
sql1= "DECLARE @i int = 0 while @i < EventID BEGIN SET @i = EventID + 1 END";
myCommand1.CommandText = sql1;
myCommand.ExecuteNonQuery();
myCommand1.ExecuteNonQuery();
MyConnection.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
finally
{
MyConnection.Close();
Events eventsWindow = new Events();
eventsWindow.dgData.Items.Refresh();
}
}
解决方案
由于您的命令在 command1 sql1 = null 之前运行,这就是您的问题所在。您需要在执行命令之前设置 sql1 的值。如果您确实希望该值为 null,则需要使用 DBNull.Value ,就像其他参数一样。
推荐阅读
- angular - 在 Angular ts 中为 Web 应用程序中不同类型的用户导航路由
- javascript - Node JS:使用请求并行调用多个 API 调用
- python - 为什么我的迭代器实现效率很低?
- sql - 如何在不创建函数的情况下删除 SQL 中的非字母数字字符?
- matlab - 在 MATLAB 中进行最近邻搜索
- r - Fortify and tidy (from broom) 导致多边形不正确
- javascript - 网站被黑 - 寻找预防技巧
- c# - EF Core:SaveChangesAsync、MARS 和“不允许新事务,因为会话中正在运行其他线程”
- javascript - 从数组中的 JSON 导出结果
- c# - WPF Button 在没有绑定或代码的情况下禁用自身