2011-07-07 32 views
1

我知道这样的问题已经存在,但我已将所有常见代码结合到答案中,但仍然没有取得成功,所以我就是这样。SqlDataAdapter.Update:是否存在SQL版本要求?

这是交易。我有一个代码块使用SqlDataAdapter.Update插入新行到现有的表...

string command = "SELECT * FROM " + tableName; 
// Initialize connection 
if (oConn == null) 
{ 
    oConn = new SqlConnection(mainConnStr); 
} 

sCmd = new SqlCommand(command, oConn); 
sCmd.CommandText = command; 
SqlDataAdapter sDA = new SqlDataAdapter(sCmd); 
DataSet ds = new DataSet(); 

oConn.Open(); 
sDA.Fill(ds, tableName); 
oConn.Close(); 

DataTable dt = ds.Tables[tableName]; 

//Add each row. 
for (int i = 0; i < queryResult.Rows.Count; i++) 
{ 
    dt.ImportRow(queryResult.Rows[i]); 
} 
// Handle the command building for the table update. 
SqlCommandBuilder sCB = new SqlCommandBuilder(sDA); 

oConn.Open(); 
sDA.Update(ds, tableName); 
oConn.Close(); 

如上所述,这工作正常。但是,如果我试图用一个两列测试表(testInt,一个int非空;和的TestString,一个varchar(50),空允许的)非常相似的代码...

private static void Main(string[] args) 
{ 
    SqlConnection = /* Build connection */ 

    string sqlQuery = "SELECT * FROM TestTable WHERE 0 = 1"; 
    SqlDataAdapter sDA = new SqlDataAdapter(sqlQuery, conn); 
    DataSet dataSet = new DataSet(); 
    conn.Open(); 
    sDA.Fill(dataSet); 
    conn.Close(); 

    DataRow newRow = dataSet.Tables[0].NewRow(); 
    newRow["testInt"] = 12; 

    SqlCommandBuilder cb = new SqlCommandBuilder(sDA); 
    conn.Open(); 
    sDA.Update(dataSet); 
    conn.Close(); 
} 

此代码没有什么,我无法弄清楚世界上的差别是什么。 (我应该注意,我也尝试使用ImportRow而不是NewRow技术。)即使当我尝试使用与第一个块(工作块)相同的表的代码块时,它仍然不会更新数据。

因此,我的问题是:使用SqlDataAdapter.Update时必须考虑哪些细节?

谢谢。

-F

+0

也许你需要返回一些数据,然后才能更新呢? – ChrisBint

+0

我假设这只是示例代码,而不是你如何编写真实的东西,但正如头一样,'SqlCommandBuilde,'DataSet','DataTable'和你的'SqlConnection'都实现了'IDisposable',并且应该有他们调用了Dispose()方法。 – pstrjds

回答

2

你必须将该行添加到DataSet

DataRow newRow = dataSet.Tables[0].NewRow(); // this doesn't add a new row to the data set 
dataSet.Tables[0].Rows.Add(newRow); // you have to call this after 
+0

请参阅MSDN上[NewRow()](http://msdn.microsoft.com/zh-cn/library/system.data.datatable.newrow.aspx)的示例 – pstrjds

相关问题