C#的Parameters.Add
请问Parameters.Add()里面的参数各个作用是什么我看到书上一般里面3个参数第一个为传值进去的变量名第二个是类型第三个是长度关于第二个类型到底是哪里的类型是数据...
请问 Parameters.Add()里面的参数各个作用是什么
我看到书上一般里面3个参数 第一个 为传值进去的变量名 第二个是类型 第三个是 长度
关于第二个类型到底是哪里的类型 是数据库里 对应的字段名的类型嘛?
那 我 cmd.Parameters.Add(new SqlParameter("@yf", SqlDbType.VarChar)).Value = "0.2";执行是可以的 yf是Float型
如果是要传给数据库里面值的类型 那我
cmd.Parameters.Add(new SqlParameter("@yf", SqlDbType.VarChar)).Value = 0.2f;也是对的
还有第三个参数是不是可有可无?
请不吝赐教 详细点
我是想写个用过程插入的类通过循环 从传进来的值解析进行循环add所以想问下这个类型的问题 如果随便什么都可以 那我全用VARCHAR了
下面的代码测试是可以运行的..
string str1 = "update pcd set yf =@yf,rq =@rq", str2 = "server=127.0.0.1;database=abcd;uid=sa;password=123456";
SqlConnection cons = new SqlConnection(str2);
cons.Open();
SqlCommand cmd = new SqlCommand(str1, cons);
cmd.Parameters.Add(new SqlParameter("@yf", SqlDbType.VarChar)).Value = "0.2";
cmd.Parameters.Add(new SqlParameter("@rq", SqlDbType.VarChar)).Value = "2010-10-10";
cmd.ExecuteNonQuery();
cons.Close(); 展开
我看到书上一般里面3个参数 第一个 为传值进去的变量名 第二个是类型 第三个是 长度
关于第二个类型到底是哪里的类型 是数据库里 对应的字段名的类型嘛?
那 我 cmd.Parameters.Add(new SqlParameter("@yf", SqlDbType.VarChar)).Value = "0.2";执行是可以的 yf是Float型
如果是要传给数据库里面值的类型 那我
cmd.Parameters.Add(new SqlParameter("@yf", SqlDbType.VarChar)).Value = 0.2f;也是对的
还有第三个参数是不是可有可无?
请不吝赐教 详细点
我是想写个用过程插入的类通过循环 从传进来的值解析进行循环add所以想问下这个类型的问题 如果随便什么都可以 那我全用VARCHAR了
下面的代码测试是可以运行的..
string str1 = "update pcd set yf =@yf,rq =@rq", str2 = "server=127.0.0.1;database=abcd;uid=sa;password=123456";
SqlConnection cons = new SqlConnection(str2);
cons.Open();
SqlCommand cmd = new SqlCommand(str1, cons);
cmd.Parameters.Add(new SqlParameter("@yf", SqlDbType.VarChar)).Value = "0.2";
cmd.Parameters.Add(new SqlParameter("@rq", SqlDbType.VarChar)).Value = "2010-10-10";
cmd.ExecuteNonQuery();
cons.Close(); 展开
5个回答
展开全部
C#应用程序与数据交互的时候只是对参数申明类型,然后传值,但是不会进行类型检查。而且传的时候都是用二进制传的,所以无论传的是什么类型的,最后都是二进制,而且在二进制中,数字3和字符3是一样的,数据库拿到这个东西后根据应用程序中申明的类型转换成相应的类型,这时如果转换不了就会出错。楼主举的例子那样写是没问题,但是假如那不是“0.2”,而是一个字母就会报错了。
另外再说说数据类型的问题,不同的程序语言对同一个类型的内存组织不是完全相同的,比如数据库的DbNull和C#中的Null就不是一回事了,更深一步的说是他们在内存中表达形式不一样。
另外再说说数据类型的问题,不同的程序语言对同一个类型的内存组织不是完全相同的,比如数据库的DbNull和C#中的Null就不是一回事了,更深一步的说是他们在内存中表达形式不一样。
展开全部
我的理解是使用Parameters.Add时建议尽量正确加上类型和长度
若不正确的指定字段类型与长度则.net 会去帮你推断有性能消耗(你写个循环两种方式分别插入50万条数据 看看)
同时正确的声明类型长度会比较严谨安、全性比较高
比如
你是一个int类型的字段 但是你指定SqlDbType.VarChar
或数据库字段长度为 nvarchar 10 你指定长度时候随便写或则不写
结果是若你正确指定类型与长度 在应用程序这一段检测发现数据类型或则长度不正确就会被挡下
但是若不给正确指定类型与长度 只会是丢给数据,执行数据时候才发现错误被挡下 我想最大的差别也许就在此点
若不正确的指定字段类型与长度则.net 会去帮你推断有性能消耗(你写个循环两种方式分别插入50万条数据 看看)
同时正确的声明类型长度会比较严谨安、全性比较高
比如
你是一个int类型的字段 但是你指定SqlDbType.VarChar
或数据库字段长度为 nvarchar 10 你指定长度时候随便写或则不写
结果是若你正确指定类型与长度 在应用程序这一段检测发现数据类型或则长度不正确就会被挡下
但是若不给正确指定类型与长度 只会是丢给数据,执行数据时候才发现错误被挡下 我想最大的差别也许就在此点
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
SqlParameter方法多态参数如下:
1。只有参数名 和 任意类型变量值
public SqlParameter(string parameterName, object value);
2 变量名 和变量类型
public SqlParameter(string parameterName, SqlDbType dbType);
3 在2的基础上加上size
public SqlParameter(string parameterName, SqlDbType dbType, int size);
4 在3的基础上加上 sourceColumn 获取或设置源列的名称,该源列映射到 DataSet
public SqlParameter(string parameterName, SqlDbType dbType, int size, string sourceColumn);
另外还有2种方法不太用到 配合dataTable 和 xml使用的
public SqlParameter(string parameterName, SqlDbType dbType, int size, ParameterDirection direction, bool isNullable, byte precision, byte scale, string sourceColumn, DataRowVersion sourceVersion, object value);
public SqlParameter(string parameterName, SqlDbType dbType, int size, ParameterDirection direction, byte precision, byte scale, string sourceColumn, DataRowVersion sourceVersion, bool sourceColumnNullMapping, object value, string xmlSchemaCollectionDatabase, string xmlSchemaCollectionOwningSchema, string xmlSchemaCollectionName);
理论上你可以把所有的变量都用varchar 来存,从sql读取出来的都是string类型。在用的时候再转化成其他类型!
使用 float.Parse(string s) 比如
float f=float.Parse("0.2");
DataTime x=DateTime.Parse("2010-1-1");
1。只有参数名 和 任意类型变量值
public SqlParameter(string parameterName, object value);
2 变量名 和变量类型
public SqlParameter(string parameterName, SqlDbType dbType);
3 在2的基础上加上size
public SqlParameter(string parameterName, SqlDbType dbType, int size);
4 在3的基础上加上 sourceColumn 获取或设置源列的名称,该源列映射到 DataSet
public SqlParameter(string parameterName, SqlDbType dbType, int size, string sourceColumn);
另外还有2种方法不太用到 配合dataTable 和 xml使用的
public SqlParameter(string parameterName, SqlDbType dbType, int size, ParameterDirection direction, bool isNullable, byte precision, byte scale, string sourceColumn, DataRowVersion sourceVersion, object value);
public SqlParameter(string parameterName, SqlDbType dbType, int size, ParameterDirection direction, byte precision, byte scale, string sourceColumn, DataRowVersion sourceVersion, bool sourceColumnNullMapping, object value, string xmlSchemaCollectionDatabase, string xmlSchemaCollectionOwningSchema, string xmlSchemaCollectionName);
理论上你可以把所有的变量都用varchar 来存,从sql读取出来的都是string类型。在用的时候再转化成其他类型!
使用 float.Parse(string s) 比如
float f=float.Parse("0.2");
DataTime x=DateTime.Parse("2010-1-1");
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
教你哦
用这个,不用考虑那么多,很方便
SqlParameter[] pars = new SqlParameter[]
{
new SqlParameter("需要的参数",传来的参数),
new SqlParameter("需要的参数",传来的参数),
new SqlParameter("需要的参数",传来的参数),
new SqlParameter("需要的参数",传来的参数)
//最后一个不要逗号
};
最大的好处是pars 可空
cmd.Parameters.Add(pars);
就算是空的也不报错
用这个,不用考虑那么多,很方便
SqlParameter[] pars = new SqlParameter[]
{
new SqlParameter("需要的参数",传来的参数),
new SqlParameter("需要的参数",传来的参数),
new SqlParameter("需要的参数",传来的参数),
new SqlParameter("需要的参数",传来的参数)
//最后一个不要逗号
};
最大的好处是pars 可空
cmd.Parameters.Add(pars);
就算是空的也不报错
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
最好和数据库相同,否则如果你超出这个范围的话不会报错,提交到数据库会被截取
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询