好像从Excel中读取出来的DataSet不能用这种方法更新,还没找到原因,希望能尽快解决。

/**//// <summary>
/// 用DataSet更新数据库
/// </summary>
/// <param name="dsSource">用于更新数据库的数据源DataSet</param>
/// <param name="srcTable">用于更新数据库的数据源表DataTable</param>
/// <param name="InitSelect">初始化SqlDataAdapter.SelectCommand的字符串,该字符串是从需要更新的数据库表中查询记录</param>
/// <param name="parameter">用于插入或更新数据库的Sql语句或者存储过程中的参数信息</param>
/// <param name="cmdText">用于更新或插入数据库的Sql命令或存储过程名称</param>
/// <param name="cmdType">执行更新或插入数据库的命令是普通Sql语句(Text)还是存储过程(StoredProcedure),是一个自定义枚举类型sqlType</param>
public static void DSUpdateTable(DataSet dsSource,string srcTable, string InitSelect, ParameterforSql parameter,string cmdText, sqlType cmdType)

...{
DataSet dsSql = new DataSet();
SqlDataAdapter sda = new SqlDataAdapter();
try

...{
sda.SelectCommand = new SqlCommand(InitSelect);
sda.SelectCommand.CommandType = CommandType.Text;
sda.SelectCommand.Connection = clsConnection.getConnection();
sda.Fill(dsSql);
clsConnection.closeConnection();
if (!cmdText.Equals(""))

...{
sda.InsertCommand = new SqlCommand(cmdText);
sda.InsertCommand.CommandType = CommandType.StoredProcedure;
//如果Sql语句有参数,即ParameterforSql类型变量已经赋值,则添加参数
if (parameter.isValuate)

...{
for (int i = 0; i < parameter.paraName.Length; i++)

...{
sda.InsertCommand.Parameters.Add(parameter.paraName[i], parameter.paraType[i], parameter.paraLength[i], (string)parameter.paraValue[i]);
}
}
sda.InsertCommand.Connection = clsConnection.getConnection();
}
sda.MissingSchemaAction = MissingSchemaAction.AddWithKey;
SqlCommandBuilder cmdbd = new SqlCommandBuilder(sda);
cmdbd.GetDeleteCommand();
cmdbd.GetInsertCommand();
cmdbd.GetUpdateCommand();

dsSource.Merge(dsSql, false, MissingSchemaAction.AddWithKey);//将dsSql数据合并到dsSource
sda.Update(dsSource, srcTable);//更新数据库
dsSource.AcceptChanges();
}
catch (Exception ex)

...{
MessageBox.Show(ex.ToString() + " 数据导入失败");
}
finally

...{
clsConnection.closeConnection();
dsSql.Dispose();
dsSource.Dispose();
sda.Dispose();
GC.Collect();
}
































































