2009-11-24 70 views
4

我需要编写一个程序。该程序的一部分是写入一个sql数据库(.mdf)。 尝试向我的表格添加新行(称为“数据”)时遇到了很多麻烦。这里是代码:如何使用c#sql server将新行添加到现有表中

... 
DataSet ds = new DataSet(); 
System.Data.SqlClient.SqlDataAdapter da; 
DataRow dRow; 
string sql = "SELECT * From Data"; 
da = new System.Data.SqlClient.SqlDataAdapter(sql, con); 
... 
System.Data.SqlClient.SqlCommandBuilder cb; 
cb = new System.Data.SqlClient.SqlCommandBuilder(da); 
dRow = ds.Tables["Data"].NewRow(); 
dRow[0] = "my_data1"; 
dRow[1] = "my_data2"; 
dRow[2] = "my_data3"; 
... 
ds.Tables["Data"].Rows.Add(dRow); 
da.Update(ds, "Data"); 
... 

我执行此代码,但数据并未保存到表中。有谁知道如何输入一个新的行到表中并保存它?

回答

7

您需要在您的SqlDataAdapter中使用InsertCommand

编辑:

下面是一个简单的例子,我刮起。还有很多其他的东西,但是这应该会让你走。它假定您有一个包含两列(Foo int,Bar nvarchar(50))的表(dbo.Foos)。

namespace DataAdapterSample 
{ 
    using System; 
    using System.Data; 
    using System.Data.SqlClient; 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      using (SqlConnection connection = new SqlConnection(@"Data Source=[your server];Initial Catalog=[your database];Integrated Security=true;")) 
      { 
       using (SqlDataAdapter dataAdapter = new SqlDataAdapter()) 
       { 
        dataAdapter.SelectCommand = new SqlCommand("select Foo, Bar from dbo.Foos", connection); 
        dataAdapter.InsertCommand = new SqlCommand("insert into dbo.Foos (Foo, Bar) values (@Foo, @Bar)", connection); 
        dataAdapter.InsertCommand.Parameters.Add(new SqlParameter("Foo", SqlDbType.Int, 4, "Foo")); 
        dataAdapter.InsertCommand.Parameters.Add(new SqlParameter("Bar", SqlDbType.NText, 50, "Bar")); 

        using (DataSet dataSet = new DataSet()) 
        { 
         dataAdapter.Fill(dataSet); 

         Console.WriteLine("There are {0} rows in the table", dataSet.Tables[0].Rows.Count); 

         DataRow newRow = dataSet.Tables[0].NewRow(); 
         newRow["Foo"] = 5; 
         newRow["Bar"] = "Hello World!"; 
         dataSet.Tables[0].Rows.Add(newRow); 

         dataAdapter.Update(dataSet); 
        }     

        //Just to prove we inserted 
        using (DataSet newDataSet = new DataSet()) 
        { 
         dataAdapter.Fill(newDataSet); 
         Console.WriteLine("There are {0} rows in the table", newDataSet.Tables[0].Rows.Count);     
        }     
       } 
      } 
      Console.ReadLine();   
     } 
    } 
} 
+0

谢谢您的回答。 可以请你给我写一个样本,因为我尝试使用'InsertCommand',但我未能。 很多再次感谢! – menachem 2009-11-24 17:07:01

0

两件事情我看到,你无论如何也不能初始化你的数据集(DS)或SqlDataAdapter的(DA)(除非你只是离开是出于对后期简化)。 da的部分初始化将会给它一个实际的sql命令。

+0

他会初始化它: string sql =“SELECT * From Data”; da = new System.Data.SqlClient.SqlDataAdapter(sql,con); 他只需要一个InsertCommand到da – 2009-11-24 16:33:31

-1

尝试,而不是设置

dRow = new DataRow(); 

,而不是

dRow = ds.Tables["Data"].NewRow(); 

,改变

da.Update(ds, "Data"); 

da.Update(ds); 
+1

-1 DataRow类有一个内部构造函数。你不能在表格外创建一个 – 2009-11-24 16:35:59

1

强制数据集接受更改,即将ds.Acceptchanges添加到您的代码中

相关问题