2013-06-27 85 views
0

我有以下代碼,並沒有更新記錄到數據庫。SqlDataAdapter不會更新記錄

SqlDataAdapter da = new SqlDataAdapter("spInvent",cs); 
da.UpdateCommand.CommandType = System.Data.CommandType.StoredProcedure; 
da.UpdateCommand.Parameters.AddWithValue("@DisplayNo", displayNo); 
da.UpdateCommand.Parameters.AddWithValue("@Q", Q); 
da.UpdateCommand.ExecuteNonQuery(); 

DataSet ds = new DataSet(); 

da.Fill(ds); 
gvInfo.DataSource = ds; 
gvInfo.DataBind(); 

在這裏,我得到的錯誤:

da.UpdateCommand.CommandType = System.Data.CommandType.StoredProcedure; 
+0

是'displayNo'或'Q'等於'null'? – gunr2171

+0

他們有價值。 – Apollo

回答

4

正確的語法是:

using System.Data; 
using System.Data.Sql; 
using System.Data.SqlClient; 
using System.Configuration; 

SqlConnection cs = new 
SqlConnection(ConfigurationManager.ConnectionStrings["myConnection"].ConnectionString); 
if (cs.State == ConnectionState.Closed) { 
    cs.Open(); 
} 
SqlCommand cmd = new SqlCommand(); 
cmd.Connection = cs; 
cmd.CommandText = "UpdateStoredProcedureName"; 
cmd.CommandType = CommandType.StoredProcedure; 
cmd.Parameters.AddWithValue("@DisplayNo", displayNo); 
cmd.Parameters.AddWithValue("@Q", Q); 
int result = cmd.ExecuteNonQuery(); 

if (result > 0) { 
    //Your Database is updated. To show it in gridview, you have 
    //to select the table and show its data. 
    SqlCommand cmd1 = new SqlCommand(); 
    cmd1.Connection = cs; 
    cmd1.CommandText = "SelectStoredProcedureName"; 
    cmd1.CommandType = CommandType.StoredProcedure; 
    cmd1.Parameters.AddWithValue("@displayId", 0); 

    //In the SelectStoredProcedure, use @displayId = 0 to 
    //show all rows. 

    SqlDataAdapter adpt = new SqlDataAdapter(); 
    adpt.SelectCommand = cmd1; 
    DataSet ds = new DataSet(); 
    adpt.Fill(ds); 
    cs.Close(); 
    GridViewID.DataSource = ds; 
    GridViewId.DataBind(); 
} else { 
    cs.Close(); 
} 
+0

SQLConnection用於建立連接。 SqlCommand用於在數據庫執行查詢。 DataAdapter用於從數據庫中提取值,DataSet用作DataAdapter的容器來存儲數據庫值。 –

+0

如何在我的gridview中顯示這個? – Apollo

+0

答覆已更新。 ExecuteNonQuery函數只能從表中插入,更新或刪除,它不能**從表中選擇**行並顯示它們。 –

0

我相信在這裏你的問題是,你不應該執行查詢,然後填寫你的數據集,你可以填寫你的數據集,所以:

SqlDataAdapter da = new SqlDataAdapter(); 
//updated to explicitly create update command object 
SqlCommand update = new SqlCommand("spInvent",cs); 
update.CommandType = System.Data.CommandType.StoredProcedure; 
update.Parameters.AddWithValue("@DisplayNo", displayNo); 
update.Parameters.AddWithValue("@Q", Q); 
da.UpdateCommand = update; 
//don't need this line: 
//da.UpdateCommand.ExecuteNonQuery(); 

DataSet ds = new DataSet(); 

da.Fill(ds); 
gvInfo.DataSource = ds; 
gvInfo.DataBind(); 
+0

我在這裏收到錯誤。 da.UpdateCommand.CommandType = System.Data.CommandType.StoredProcedure; – Apollo

+0

我已經更新了我的答案,以明確創建更新命令,然後將其分配給數據適配器,請嘗試。 –

0

幾件事情在這裏:

  1. ÿ你不要指定實際的UpdateCommandSqlDataAdapter的構造函數設置了SelectCommand。您需要指定使用哪個sproc來更新數據。
  2. 你並不需要執行SelectCommandUpdateCommand直接 - 當你用它來填補DataSet或調用它Update()(在GridView可以爲你做這個,這取決於你如何電線它DataAdapter的會自動做向上)。