cmd.parameters.add(); 与 cmd.parameters.AddWithValue();疑问

cngothic 2009-01-10 11:21:22
cmd.parameters.Add("@state", state);
cmd.parameters.AddWithValue("@state", state);
这两条语句哪个好。
刚才看了篇文章说到
add 或以加很多参数。相比效率比AddWithValue要高。推崇Add方法。

朋友能给说下
Add()方法 cmd.parameters.Add("@state", state); 这句的加上全部参数应该怎么写?个参数表示什么意思?



SqlParameter dbParameter_state = new SqlParameter();
dbParameter_state.ParameterName = "@state";
dbParameter_state.Value = state;
dbParameter_state.DbType = DbType.StringFixedLength;
dbCommand.Parameters.Add(dbParameter_state);

上面代码写成一句怎么写?

cmd.parameters.AddWithValue("@state", state);
应该也能加参数吧?要是能加参数那就不存在效率比Add方法差了吧。
cmd.parameters.AddWithValue("@state", state); 这句加上全部参数怎么写?个参数表示什么意思?
...全文
4389 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
laxiang1 2011-05-12
  • 打赏
  • 举报
回复
补充哈!
C#应用程序与数据交互的时候只是对参数申明类型,然后传值,但是不会进行类型检查。而且传的时候都是用二进制传的,所以无论传的是什么类型的,最后都是二进制,而且在二进制中,数字3和字符3是一样的,数据库拿到这个东西后根据应用程序中申明的类型转换成相应的类型,这时如果转换不了就会出错。楼主举的例子那样写是没问题,但是假如那不是“0.2”,而是一个字母就会报错了。
另外再说说数据类型的问题,不同的程序语言对同一个类型的内存组织不是完全相同的,比如数据库的DbNull和C#中的Null就不是一回事了,更深一步的说是他们在内存中表达形式不一样。
wangzhuodezmjy 2010-11-24
  • 打赏
  • 举报
回复
klk
thisismyson 2010-03-25
  • 打赏
  • 举报
回复
thisismyson 2010-03-25
  • 打赏
  • 举报
回复
thisismyson 2010-03-25
  • 打赏
  • 举报
回复
zh569480383 2010-03-21
  • 打赏
  • 举报
回复
学习啦 谢谢各位哈
lianyi68 2010-01-08
  • 打赏
  • 举报
回复
學習了
留下笑容 2009-06-01
  • 打赏
  • 举报
回复
public SqlParameter AddWithValue(string parameterName, object value)
{
return this.Add(new SqlParameter(parameterName, value));
}


由此可以看出AddWithValue实际上是调用了
public SqlParameter Add(SqlParameter value)
函数,实现手法不同而已

cmd.parameters.AddWithValue("@url", "http://www.zixun5.net");


cmd.parameters.Add("@url", "http://www.zixun5.net");

一样。参考
[Obsolete("Add(String parameterName, Object value) has been deprecated. Use AddWithValue(String parameterName, Object value). http://go.microsoft.com/fwlink/?linkid=14202", false), EditorBrowsable(EditorBrowsableState.Never)]
public SqlParameter Add(string parameterName, object value)
{
return this.Add(new SqlParameter(parameterName, value));
}

cngothic 2009-01-12
  • 打赏
  • 举报
回复
谢谢楼上的大哥。我结贴早了些没分给你发。
hongqi162 2009-01-12
  • 打赏
  • 举报
回复
cmd.parameters.Add("@state",DbType.StringFixedLength,50,state);
1、参数名
2、参数类型
3、参数长度
4、传递值



1、2、3的值根据数据库定义来填写
cngothic 2009-01-12
  • 打赏
  • 举报
回复
谢谢两位。

wangping_li 2009-01-11
  • 打赏
  • 举报
回复
AddWithValue方法简化了Add方法
在运行时对所输入的数据类型进行判断(即自动判断参数的类型),获取对应的数据库类型
但是Add方法应该会比AddWithValue的效率要高
cngothic 2009-01-10
  • 打赏
  • 举报
回复
addwithValue只有两个参数.
我看到的文章说的意思是add方法可以加参数的数据类型参数。addwithValue就要去猜测参数的数据类型。所以add比addwithValue要高。

add()最多加几个参数。分别是什么?

cmd.parameters.Add("@state",DbType.StringFixedLength,50,state);
这句中的 50 表示什么?
king19840811 2009-01-10
  • 打赏
  • 举报
回复
cmd.parameters.AddWithValue效率会比add 好。前面一个方法是2.0出来的新东西。微软没必要打自己的脸

上面代码写成一句怎么写?
cmd.parameters.Add("@state",DbType.StringFixedLength,50,state);

addwithValue只有两个参数
System.Data.Silverlight V2.0版本升级说明 一、升级说明 1、重写了一套DataSet、DataTable,自定义Xml序列化和反序列化方法; 2、优化了程序,引用该组建无需引用其它关联程序集; 3、增加DataTable与实体类集合的互转、DataTable转换成动态类型集合、DataTable直接绑定到控件; 4、增加事务处理功能; 5、感谢网友“尘世流浪汉”提出宝贵意见,也欢迎大家试用并提出更多建议! 二、新功能示例 1、DataTable新功能 try { //创建一个数据连接 DbConnection conn = new DbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|SoundEvents.mdb;"); //SQL Server无须做如下两步设置 //设置使用的数据访问程序集 conn.AssemblyName = "System.Data"; //设置数据工厂,这里是Oledb方式的数据工厂 conn.DbProviderFactory = "System.Data.OleDb.OleDbFactory"; //创建一个数据命令 DbCommandSyn cmd = new DbCommandSyn(); //设置命令的连接 cmd.Connection = conn; //设置SQL语句,可以是存储过程 cmd.CommandText = "SELECT [JtServerCode],[JtEventID],[JtEventName] FROM [JtEvents] WHERE [JtServerCode]=@JtServerCode"; //设置命令类型,一般SQL语句是Text,存储过程是StoredProcedure cmd.CommandType = DbCommandType.Text; //设置执行类型 cmd.ExecuteType = DbExecuteType.Reader; //添加一个参数,无参数可以不添加 cmd.Parameters.Add(new DbParameter("@JtServerCode", "jt01")); //执行命令,得到结果 DbCommandExecuteResult result = cmd.Execute(); if (!string.IsNullOrEmpty(result.ErrMsg))//首先判断ErrMsg是否有值,有表示执行过程发生错误 { MessageBox.Show("发生错误:" + result.ErrMsg); } else { //将DataTable直接绑定到控件 DataTable dt = result.ReaderResult; dataGrid1.ItemsSource = dt; //将DataTable转换成实体类集合后绑定到控件 List hisEvents = result.ReaderResult.ToEntityList(); dataGrid1.ItemsSource = hisEvents; //将DataTable转换成动态类型集合后绑定到控件 List objList = result.ReaderResult.ToObjectList(); dataGrid1.ItemsSource = objList; } } catch (Exception ex) { MessageBox.Show("发生错误:" + ex.ToString()); } 2、事物示例 try { //创建一个数据连接 DbConnection conn = new DbConnection("Data Source=|DataDirectory|CSmsPlatThird.db;Pooling=true;FailIfMissing=false"); //设置使用的数据访问程序集 conn.AssemblyName = "System.Data.SQLite"; //设置数据工厂,这里是SQLite的数据工厂 conn.DbProviderFactory = "System.Data.SQLite.SQLiteFactory"; //创建一个数据命令 DbCommandSyn cmd = new DbCommandSyn(); //设置命令的连接 cmd.Connection = conn; //设置执行类型 cmd.ExecuteType = DbExecuteType.Transaction; //添加事务 TransactionItem trans1 = new TransactionItem(); trans1.CommandText = "INSERT INTO [T_Message] ([Mobile],[Content],[DateTime],[PlatFlag],[State]) VALUES (@Mobile,@Content,@DateTime,@PlatFlag,@State)"; trans1.CommandType = DbCommandType.Text; trans1.Parameters.AddWithValue("@Mobile", new Random().Next(10000000, 888888888).ToString()); trans1.Parameters.AddWithValue("@Content", "这是一条测试短信!"); trans1.Parameters.AddWithValue("@DateTime", DateTime.Now); trans1.Parameters.AddWithValue("@PlatFlag", "SZHK"); trans1.Parameters.AddWithValue("@State", true); cmd.Transaction.Add(trans1); TransactionItem trans2 = new TransactionItem(); trans2.CommandText = "INSERT INTO [T_Logger] ([Content],[DateTime],[PlatFlag]) VALUES (@Content,@DateTime,@PlatFlag)"; trans2.CommandType = DbCommandType.Text; trans2.Parameters.AddWithValue("@Content", "短信发送成功!"); trans2.Parameters.AddWithValue("@DateTime", DateTime.Now); trans2.Parameters.AddWithValue("@PlatFlag", "SZHK"); cmd.Transaction.Add(trans2); //执行命令,得到结果 DbCommandExecuteResult result = cmd.Execute(); if (!string.IsNullOrEmpty(result.ErrMsg))//首先判断ErrMsg是否有值,有表示执行过程发生错误 { MessageBox.Show("发生错误:" + result.ErrMsg); } else { if (result.TransactionResult) { MessageBox.Show("事务执行成功!"); } else { MessageBox.Show("事务执行失败!"); } } } catch (Exception ex) { MessageBox.Show("发生错误:" + ex.ToString()); } 三、技术交流 有任何问题可以加入唯一指定的专用QQ群153079750进行反馈交流,也欢迎加入笔者的另一个Silverlight技术群175213051进行交流。

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧