c#asp.net中数据格式转换语句的问题?我采用存储过程向数据库表中添加数据,我的存储过程如下:

CREATE PROCEDURE addbingtiao
@pname varchar(50),@pdate datetime,@yuanliao char(10),@mtype char(10),@qstype char(10),@daobie char(10),@wweight float(8),@dweight float(8),@huichao float(8),@jxqianshen float(8),@zlqianshen float(8),@cyrate float(8),@qzlfenpei float(8),@ffenpei float(8),@sfenpei float(8),@tfenpei float(8),@hzlfenpei float(8),@ydia int,@sdia int,@tdia int,@fdia int,@ydis int,@sdis int,@tdis int,@ygeju int,@sgeju int,@tgeju int,@ypre int,@spre int,@tpre int,@fpre int,
@qspeed float(8),@bhnum int,@lbdia float(8)
as
insert into bingtiao(pname,pdate,yuanliao,mtype,qstype,daobie,wweight,dweight,huichao,
jxqianshen,zlqianshen,cyrate,qzlfenpei,ffenpei,sfenpei,tfenpei,hzlfenpei,ydia,sdia,tdia,fdia,ydis,sdis,tdis,ygeju,sgeju,tgeju,ypre,spre,tpre,fpre,qspeed,bhnum,lbdia)
values(@pname,@pdate,@yuanliao,@mtype,@qstype,@daobie,@wweight,@dweight,@huichao,@jxqianshen,@zlqianshen,@cyrate,@qzlfenpei,@ffenpei,
@sfenpei,@tfenpei,@hzlfenpei,@ydia,@sdia,@tdia,@fdia,@ydis,@sdis,@tdis,@ygeju,
@sgeju,@tgeju,@ypre,@spre,@tpre,@fpre,@qspeed,@bhnum,@lbdia)
GO
我的部分添加按钮的代码如下:
private void btok_Click(object sender, System.EventArgs e)
{if(Page.IsValid)
{SqlCommand cm=new SqlCommand("addbingtiao",cn);
cm.CommandType=CommandType.StoredProcedure;
cm.Parameters.Add(new SqlParameter("@pname",SqlDbType.VarChar,50));
cm.Parameters.Add(new SqlParameter("@pdate",SqlDbType.DateTime,8));
cm.Parameters.Add(new SqlParameter("@yuanliao",SqlDbType.Char,10));
cm.Parameters.Add(new SqlParameter("@mtype",SqlDbType.Char,10));
cm.Parameters.Add(new SqlParameter("@qstype",SqlDbType.Char,10));
cm.Parameters.Add(new SqlParameter("@daobie",SqlDbType.Char,10));
cm.Parameters.Add(new SqlParameter("@wweight",SqlDbType.Float,8));
..........cm.Parameters.Add(new SqlParameter("@bhnum",SqlDbType.Int,4));
cm.Parameters.Add(new SqlParameter("@lbdia",SqlDbType.Float,8));
cm.Parameters["@pname"].Value=tbname.Text;
cm.Parameters["@pdate"].Value=tbdate.Text;
cm.Parameters["@yuanliao"].Value=tbyl.Text;
cm.Parameters["@mtype"].Value=tbjx.Text;
..........cm.Parameters["@lbdia"].Value=tblzhj.Text;
cm.Connection.Open();
try
{cm.ExecuteNonQuery();lblnote.Text="添加成功!";}
catch(SqlException)
{lblnote.Text="添加失败!";lblnote.Style["color"]="red";}
cm.Connection.Close();}}
如果我不所有的textbox填上数据时就能插入成功,但是要是有空的textbox时就不能成功添加。但是表中字段有的是可以为空的。请大家帮帮忙,要进行怎样的格式转换,我的字段类型有varchar,char,float,int。这个格式转换代码要写在哪里,存储过程里,还是添加按钮的激发事件代码中。
当我没有把所有textbox填上数据时,会有错误提示:输入格式不正确。
谢谢大家!

我觉得 你可以给你的textbox中给出初始值
因为有的数据类型 如果不填数据是无法自动转换的 如date类型
或者你在存储过程中将为空的值转换为某缺省值,以避免这个问题追问

除了pname,pdate,yuanliao这三个字段不能为空以外,其他的字段都是可以为空的,而且不同的产品为空的字段也是不同的。这要具体怎么解决呢?

追答

如果我遇到类似的问题,一般会一个参数一个参数的测试,找到引起问题的那个参数,然后对其进行相应调整
我印象中像整型 浮点这样的数据类型 如果你传入的是个"",好像不能自动转换
所以这个时候你给个0之类的值作为缺省参数
字符类型的就可以不考虑了

你可以这样测试一下你的存储过程 保持联系

追问

我发现了,要是我的数据类型是整型或小数类型的,为空的条件下,不填textbox时就添加不成功。这要怎么修改?

追答

对这种类型参数的textbox中给出初始值
或在你存储过程的开头加入条件判断
例如, if(参数名== '') 参数名=0;
你再试试看

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-10-19
你的数据类型为float或者int类型,但是传入的文本框的值为''

是不是因此转换的时候出错,查一下追问

我检查了就是这个问题。这个问题怎么解决,采用默认值?我根据楼上朋友的提示在存储过程中加if判断语句,但是都有语法错误,不知道具体怎么弄了,你能给出详细的修改方法吗?谢谢

第2个回答  2011-10-21
cm.Parameters["@pdate"].Value=tbdate.Text;为啥不在这个地方直接转换下呢如:
cm.Parameters["@pdate"].Value=convert.toDate(tbdate.Text);
相似回答