我想将数据集更改更新到我的数据库,所以我使用了这种代码:
SqlCommandBuilder mySqlCommandBuilder = new SqlCommandBuilder(sqladap);
sqladap.Update(ds, TableName);
虽然它工作正常但我已将此代码用于我项目中的另一个数据集,但第二个不起作用。我跟踪了这段代码,看到了数据集的行。它包含最后提取的行和新行,但SQLDataAdapter更新任何数据,也不会引发错误。
这是完整的代码:
public static SqlDataAdapter AdapterStoredProcedure(string sp_Name, object obj)
{
ClsEventLogs EventLogs = new ClsEventLogs();
try
{
SqlConnection connection = SQLDBConnection();
SqlDataAdapter sqladap = new SqlDataAdapter(sp_Name, connection);
sqladap.SelectCommand.CommandType = CommandType.StoredProcedure;
if (obj != null)
{
Type t = obj.GetType();
string str = string.Empty;
System.Reflection.FieldInfo[] fields = t.GetFields();
foreach (System.Reflection.FieldInfo field in fields)
{
sqladap.SelectCommand.Parameters.Add(new SqlParameter(field.Name, SqlDbType.VarChar, 200));
sqladap.SelectCommand.Parameters[field.Name].Value = field.GetValue(obj).ToString();
}
}
return sqladap;
}
catch(Exception er)
{
EventLogs.Eventlog("clsDataStore : ExecuteStoredProcedure", er.Message, ClsEventLogs.EventType.etCriticalError, false);
return null;
}
}
// Creating Adapter
SqlDataAdapter dAdap = null;
DataSet ds = new DataSet();
dAdap = clsDataStore.AdapterStoredProcedure("sp_SelectTbl_Client", null);
dAdap.Fill(ds, "tbl_client");
//here is where i'm Updating the dataset
SqlCommandBuilder mySqlCommandBuilder = new SqlCommandBuilder(sqladap);
sqladap.Update(ds, TableName);
答案 0 :(得分:0)
问一个愚蠢的问题:你是否在调用Update
方法后告诉适配器提交更改?
编辑好的,既然您已经发布了代码,我还要问另一个愚蠢的问题:您在考虑确定更新是否有效?您现在是连接到远程数据库还是项目中的测试数据库?如果是后者,那么如果你每次都在重建(这是我习惯做的事情)那么你的数据库工作副本(在\bin
目录中)会被吹走并被一个新的副本取代无论在项目中引用它的哪个地方。当然,这假设您使用的是嵌入式数据库(如MSSQLCE)。
答案 1 :(得分:0)
您必须在生成的SQL Update / Insert语句中查找(调试器)。他们很可能是有缺陷的,甚至是空的。
CommandBuilder非常有限,它只处理非常简单的SELECT a,b FROM table语句。
您可能会发现不起作用的SP包含JOIN,计算列或类似的内容。
最佳课程:提供您自己的更新语句或SP