2009-11-24 71 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添加到您的代碼中

相關問題