首页 > 解决方案 > 使用 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();
        }


    }  

标签: excelwpfoledb

解决方案


由于您的命令在 command1 sql1 = null 之前运行,这就是您的问题所在。您需要在执行命令之前设置 sql1 的值。如果您确实希望该值为 null,则需要使用 DBNull.Value ,就像其他参数一样。


推荐阅读