死活不行,stuname依旧为jack。请各位帮忙。谢谢!!!
表名为stu, 里面只有一条记录。
stuid stuname
--------------------
1 jack
存储过程为UpdateStu
create PROCEDURE UpdateStu
@stuid char(10),
@stuname char(10)
as
begin
set NOCOUNT on
UPDATE stu SET stuname = @stuname WHERE stuid = @stuid
return 0
end
go
代码为:
//准备dataset
DataSet stuSet = new DataSet();
DataTable table = new DataTable("stu");
DataColumnCollection columns = table.Columns;
columns.Add("stuid", typeof(System.String));
columns.Add("stuname", typeof(System.String));
stuSet.Tables.Add(table);
DataRow stuRow = stuSet.Tables["stu"].NewRow();
stuRow["stuid"] = "1";
stuRow["stuname"] = "tom";
stuSet.Tables["stu"].Rows.Add(stuRow);
stuSet.AcceptChanges();
//准备dscommand
SqlDataAdapter dsCommand = new SqlDataAdapter();
dsCommand.TableMappings.Add("Table", "stu");
string strConn = "server=.;User ID=sa;Password=pwd;database=mytest;Connection Reset=FALSE";
SqlCommand updateCommand = new SqlCommand("UpdateStu", strConn);
updateCommand.CommandType = CommandType.StoredProcedure;
SqlParameterCollection sqlParams = updateCommand.Parameters;//准备参数
sqlParams.Add(new SqlParameter("@stuid", SqlDbType.Char, 10));
sqlParams.Add(new SqlParameter("@stuname", SqlDbType.Char, 10));
sqlParams["@stuid"].SourceColumn = "stuid";//字段映射
sqlParams["@stuname"].SourceColumn = "stuname";//字段映射
dsCommand.UpdateCommand = updateCommand;
dsCommand.Update(stuSet, "stu");//提交数据库
stuSet.AcceptChanges();
20 个解决方案
#1
跟踪一下,看看生成的语句对不对
#2
to:dgrwang()
请问如何才能查看到生成的语句?谢谢!
请问如何才能查看到生成的语句?谢谢!
#3
上面的代码全部都编译通过了
#4
调试以下。
#5
//****用SQL事探器看一下,更新SQL语句是否正确.
#6
樓主把問題複雜化了。一個更新語句,不需要這麼復雜:
//定義初始變量
string strConn = "server=.;User ID=sa;Password=pwd;database=mytest;Connection Reset=FALSE";
SqlConnection conn=New SqlConnection(strConn);
SqlCommand updateCommand = new SqlCommand("UpdateStu @studid,@stuname", conn);
updateCommand.CommandType = CommandType.StoredProcedure;
//加入參數
SqlParameter param=New SqlParameter("@stuid", SqlDbType.Char, 10));
param.Value="1";
updateCommmand.Parameters.Add(param);
param=new SqlParameter("@stuname", SqlDbType.Char, 10));
param.Value="tom";
updateCommmand.Parameters.Add(param);
//更新數據
updateCommand.Connection.Open();
updateCommand.ExecuteNonQuery();
updateCommand.Connection.Close();
updateCommand.Dispose();
//定義初始變量
string strConn = "server=.;User ID=sa;Password=pwd;database=mytest;Connection Reset=FALSE";
SqlConnection conn=New SqlConnection(strConn);
SqlCommand updateCommand = new SqlCommand("UpdateStu @studid,@stuname", conn);
updateCommand.CommandType = CommandType.StoredProcedure;
//加入參數
SqlParameter param=New SqlParameter("@stuid", SqlDbType.Char, 10));
param.Value="1";
updateCommmand.Parameters.Add(param);
param=new SqlParameter("@stuname", SqlDbType.Char, 10));
param.Value="tom";
updateCommmand.Parameters.Add(param);
//更新數據
updateCommand.Connection.Open();
updateCommand.ExecuteNonQuery();
updateCommand.Connection.Close();
updateCommand.Dispose();
#7
to: kssys()
首先谢谢您的回答!
其实我也不想负杂话。
上面我写的代码其实是把表现层、db访问层合并到一起了。
我原来的代码层和层之间是通过dataset来传递信息的,
所以会简单问题复杂化。
首先谢谢您的回答!
其实我也不想负杂话。
上面我写的代码其实是把表现层、db访问层合并到一起了。
我原来的代码层和层之间是通过dataset来传递信息的,
所以会简单问题复杂化。
#8
to: kssys()
用你的代码是可以解决问题,
但我那个还不行:)
郁闷的是不知道问题出在哪儿,
我也调试过了,但不知道重点看什么调试信息.
用你的代码是可以解决问题,
但我那个还不行:)
郁闷的是不知道问题出在哪儿,
我也调试过了,但不知道重点看什么调试信息.
#9
看生成的SQL语句,,
#10
因為你的參數裡面沒有賦值
//在Add後面加上
sqlParams["@stuid"].value=stuSet.Tables["stu"].Rows[0][0];
sqlParams["@stuname"].value=stuSet.Tables["stu"].Rows[0][1];
如果批量更新Table,應循環產生更新語句
//在Add後面加上
sqlParams["@stuid"].value=stuSet.Tables["stu"].Rows[0][0];
sqlParams["@stuname"].value=stuSet.Tables["stu"].Rows[0][1];
如果批量更新Table,應循環產生更新語句
#11
to: kssys()
我已经构建好了stuSet,也就是说stuSet里已经有了数据
然后我又通过下面两句进行字段映射
sqlParams["@stuid"].SourceColumn = "stuid";//字段映射
sqlParams["@stuname"].SourceColumn = "stuname";//字段映射
所以sqlParams["@stuname"].value是不需要设置的
我已经构建好了stuSet,也就是说stuSet里已经有了数据
然后我又通过下面两句进行字段映射
sqlParams["@stuid"].SourceColumn = "stuid";//字段映射
sqlParams["@stuname"].SourceColumn = "stuname";//字段映射
所以sqlParams["@stuname"].value是不需要设置的
#12
Try it
#13
to: kssys()
我试过了,在
sqlParams["@stuname"].SourceColumn = "stuname";//字段映射
后加了你说了那两句:
sqlParams["@stuid"].Value = "1";
sqlParams["@stuname"].Value = "tom";
但还是不行:(
我试过了,在
sqlParams["@stuname"].SourceColumn = "stuname";//字段映射
后加了你说了那两句:
sqlParams["@stuid"].Value = "1";
sqlParams["@stuname"].Value = "tom";
但还是不行:(
#14
SqlCommand updateCommand = new SqlCommand("UpdateStu", strConn);
->
SqlCommand updateCommand = new SqlCommand("UpdateStu @studid,@stuname", strConn);
->
SqlCommand updateCommand = new SqlCommand("UpdateStu @studid,@stuname", strConn);
#15
to: kssys()
按你说的做了,还是不行
按你说的做了,还是不行
#16
to: kssys()
是不是我还缺点映射?好像映射方面出了问题
是不是我还缺点映射?好像映射方面出了问题
#17
不好意思,走开了。
不能更新的原因是因为运行Update()之前,调用了AcceptChanges()方法。
AcceptChanges();方法将把所有RowState设为Unchanged;因此将不更新数据库
不能更新的原因是因为运行Update()之前,调用了AcceptChanges()方法。
AcceptChanges();方法将把所有RowState设为Unchanged;因此将不更新数据库
#18
将不会调用UpdateCommand来执行更新。
#19
因此可以这样来写:
DataRow stuRow = stuSet.Tables["stu"].NewRow();
stuSet.Tables["stu"].Rows.Add(stuRow);
stuSet.AcceptChanges();
stuRow["stuid"] = "1";
stuRow["stuname"] = "tom";
DataRow stuRow = stuSet.Tables["stu"].NewRow();
stuSet.Tables["stu"].Rows.Add(stuRow);
stuSet.AcceptChanges();
stuRow["stuid"] = "1";
stuRow["stuname"] = "tom";
#20
to:kssys()
问题已解决,真是太感谢你了!
问题已解决,真是太感谢你了!
#21
#1
跟踪一下,看看生成的语句对不对
#2
to:dgrwang()
请问如何才能查看到生成的语句?谢谢!
请问如何才能查看到生成的语句?谢谢!
#3
上面的代码全部都编译通过了
#4
调试以下。
#5
//****用SQL事探器看一下,更新SQL语句是否正确.
#6
樓主把問題複雜化了。一個更新語句,不需要這麼復雜:
//定義初始變量
string strConn = "server=.;User ID=sa;Password=pwd;database=mytest;Connection Reset=FALSE";
SqlConnection conn=New SqlConnection(strConn);
SqlCommand updateCommand = new SqlCommand("UpdateStu @studid,@stuname", conn);
updateCommand.CommandType = CommandType.StoredProcedure;
//加入參數
SqlParameter param=New SqlParameter("@stuid", SqlDbType.Char, 10));
param.Value="1";
updateCommmand.Parameters.Add(param);
param=new SqlParameter("@stuname", SqlDbType.Char, 10));
param.Value="tom";
updateCommmand.Parameters.Add(param);
//更新數據
updateCommand.Connection.Open();
updateCommand.ExecuteNonQuery();
updateCommand.Connection.Close();
updateCommand.Dispose();
//定義初始變量
string strConn = "server=.;User ID=sa;Password=pwd;database=mytest;Connection Reset=FALSE";
SqlConnection conn=New SqlConnection(strConn);
SqlCommand updateCommand = new SqlCommand("UpdateStu @studid,@stuname", conn);
updateCommand.CommandType = CommandType.StoredProcedure;
//加入參數
SqlParameter param=New SqlParameter("@stuid", SqlDbType.Char, 10));
param.Value="1";
updateCommmand.Parameters.Add(param);
param=new SqlParameter("@stuname", SqlDbType.Char, 10));
param.Value="tom";
updateCommmand.Parameters.Add(param);
//更新數據
updateCommand.Connection.Open();
updateCommand.ExecuteNonQuery();
updateCommand.Connection.Close();
updateCommand.Dispose();
#7
to: kssys()
首先谢谢您的回答!
其实我也不想负杂话。
上面我写的代码其实是把表现层、db访问层合并到一起了。
我原来的代码层和层之间是通过dataset来传递信息的,
所以会简单问题复杂化。
首先谢谢您的回答!
其实我也不想负杂话。
上面我写的代码其实是把表现层、db访问层合并到一起了。
我原来的代码层和层之间是通过dataset来传递信息的,
所以会简单问题复杂化。
#8
to: kssys()
用你的代码是可以解决问题,
但我那个还不行:)
郁闷的是不知道问题出在哪儿,
我也调试过了,但不知道重点看什么调试信息.
用你的代码是可以解决问题,
但我那个还不行:)
郁闷的是不知道问题出在哪儿,
我也调试过了,但不知道重点看什么调试信息.
#9
看生成的SQL语句,,
#10
因為你的參數裡面沒有賦值
//在Add後面加上
sqlParams["@stuid"].value=stuSet.Tables["stu"].Rows[0][0];
sqlParams["@stuname"].value=stuSet.Tables["stu"].Rows[0][1];
如果批量更新Table,應循環產生更新語句
//在Add後面加上
sqlParams["@stuid"].value=stuSet.Tables["stu"].Rows[0][0];
sqlParams["@stuname"].value=stuSet.Tables["stu"].Rows[0][1];
如果批量更新Table,應循環產生更新語句
#11
to: kssys()
我已经构建好了stuSet,也就是说stuSet里已经有了数据
然后我又通过下面两句进行字段映射
sqlParams["@stuid"].SourceColumn = "stuid";//字段映射
sqlParams["@stuname"].SourceColumn = "stuname";//字段映射
所以sqlParams["@stuname"].value是不需要设置的
我已经构建好了stuSet,也就是说stuSet里已经有了数据
然后我又通过下面两句进行字段映射
sqlParams["@stuid"].SourceColumn = "stuid";//字段映射
sqlParams["@stuname"].SourceColumn = "stuname";//字段映射
所以sqlParams["@stuname"].value是不需要设置的
#12
Try it
#13
to: kssys()
我试过了,在
sqlParams["@stuname"].SourceColumn = "stuname";//字段映射
后加了你说了那两句:
sqlParams["@stuid"].Value = "1";
sqlParams["@stuname"].Value = "tom";
但还是不行:(
我试过了,在
sqlParams["@stuname"].SourceColumn = "stuname";//字段映射
后加了你说了那两句:
sqlParams["@stuid"].Value = "1";
sqlParams["@stuname"].Value = "tom";
但还是不行:(
#14
SqlCommand updateCommand = new SqlCommand("UpdateStu", strConn);
->
SqlCommand updateCommand = new SqlCommand("UpdateStu @studid,@stuname", strConn);
->
SqlCommand updateCommand = new SqlCommand("UpdateStu @studid,@stuname", strConn);
#15
to: kssys()
按你说的做了,还是不行
按你说的做了,还是不行
#16
to: kssys()
是不是我还缺点映射?好像映射方面出了问题
是不是我还缺点映射?好像映射方面出了问题
#17
不好意思,走开了。
不能更新的原因是因为运行Update()之前,调用了AcceptChanges()方法。
AcceptChanges();方法将把所有RowState设为Unchanged;因此将不更新数据库
不能更新的原因是因为运行Update()之前,调用了AcceptChanges()方法。
AcceptChanges();方法将把所有RowState设为Unchanged;因此将不更新数据库
#18
将不会调用UpdateCommand来执行更新。
#19
因此可以这样来写:
DataRow stuRow = stuSet.Tables["stu"].NewRow();
stuSet.Tables["stu"].Rows.Add(stuRow);
stuSet.AcceptChanges();
stuRow["stuid"] = "1";
stuRow["stuname"] = "tom";
DataRow stuRow = stuSet.Tables["stu"].NewRow();
stuSet.Tables["stu"].Rows.Add(stuRow);
stuSet.AcceptChanges();
stuRow["stuid"] = "1";
stuRow["stuname"] = "tom";
#20
to:kssys()
问题已解决,真是太感谢你了!
问题已解决,真是太感谢你了!