用存储过程插入数据行时的问题。

edwardliu 2009-07-05 05:05:49
有两个字段,一个是轧辊编号,一个是出厂编号,前者必须有,后者可以有。写了一个存储过程如下。
ALTER PROCEDURE dbo.text
(
@轧辊编号 nvarchar(50)='',
@出厂编号 nvarchar(50)=''
)
AS DECLARE @STR1 varchar(50)=''
IF (@出厂编号!='')
BEGIN
SET @STR1=@STR1+',出厂编号'
END
DECLARE @STR2 varchar(50)=''
BEGIN
IF (@出厂编号!='')
SET @STR2=@STR2+','+cast(@出厂编号 as varchar(50))
END
DECLARE @STR varchar(200)=''
SET @STR=@STR+'INSERT INTO BasicInfo
(轧辊编号'+@STR1+')
VALUES
('+cast(@轧辊编号 as varchar(50))+@STR2+');'
EXEC(@STR)
RETURN
运行后从数据类型 nvarchar 转换为 float 时出错。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.Data.SqlClient.SqlException: 从数据类型 nvarchar 转换为 float 时出错。
行 47: cmd.ExecuteNonQuery();
行 48: conn.Close();
行 49:


源文件: c:\Documents and Settings\Administrator\桌面\轧辊管理系统BS版\AddNewBasicRollerRecord.aspx.cs 行: 47
不知道是怎么回事,请大家帮忙了。
...全文
62 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
edwardliu 2009-07-05
  • 打赏
  • 举报
回复
呵呵,自己解决了,还是再次谢谢各位。
edwardliu 2009-07-05
  • 打赏
  • 举报
回复
还是问个问题,那我用c#中的textbox1直接插入数据库。那要怎么输入啊。
devilidea 2009-07-05
  • 打赏
  • 举报
回复
最好是用[]括起来
feixianxxx 2009-07-05
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 edwardliu 的回复:]
正式这个问题了,真是谢谢你了。
[/Quote]
NO ths
edwardliu 2009-07-05
  • 打赏
  • 举报
回复
正式这个问题了,真是谢谢你了。
feixianxxx 2009-07-05
  • 打赏
  • 举报
回复
'中文输入问题' -》N'中文输入问题'
feixianxxx 2009-07-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 edwardliu 的回复:]
按楼上各位的方法综合改了改,这个可以了,但是发现个问题是,不能输入汉字,字母,数字都可以。我是用的nvarchar啊,请教一下各位了。
[/Quote]
有没有加N
NVARCHAR 的格式 是 N'阿哦'
edwardliu 2009-07-05
  • 打赏
  • 举报
回复
在nvarchar中输入 中文输入问题,就会显示下面错误。

列名 '中文输入问题' 无效。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Data.SqlClient.SqlException: 列名 '中文输入问题' 无效。

源错误:


行 77: // cmd.Parameters.Add("@过盈量", SqlDbType.Float).Value = this.TextBox17.Text;
行 78: // cmd.Parameters.Add("@辊径", SqlDbType.Float).Value = 0.5;
行 79: cmd.ExecuteNonQuery();
行 80: conn.Close();
行 81: }


源文件: c:\Documents and Settings\Administrator\桌面\轧辊管理系统BS版\AddNewBasicRollerRecord.aspx.cs 行: 79
edwardliu 2009-07-05
  • 打赏
  • 举报
回复
按楼上各位的方法综合改了改,这个可以了,但是发现个问题是,不能输入汉字,字母,数字都可以。我是用的nvarchar啊,请教一下各位了。
-晴天 2009-07-05
  • 打赏
  • 举报
回复
如果一定要那样做,可能是这儿出错了:
('+cast(@轧辊编号 as varchar(50))+@STR2+');'
应为
('+cast(@轧辊编号 as varchar(50))+isnull(@STR2,'')+');'
feixianxxx 2009-07-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 qianjin036a 的回复:]
有必要搞这么麻烦啊!SQL codeif (@出厂编号='')insertinto basicinfo(轧辊编号,出厂编号)values(@轧辊编号,@出厂编号)elseinsertinto basicinfo(轧辊编号)values(@轧辊编号)
[/Quote]
。。。
-晴天 2009-07-05
  • 打赏
  • 举报
回复
有必要搞这么麻烦啊!
if (@出厂编号='')
insert into basicinfo(轧辊编号,出厂编号) values(@轧辊编号,@出厂编号)
else
insert into basicinfo(轧辊编号) values(@轧辊编号)
feixianxxx 2009-07-05
  • 打赏
  • 举报
回复
--try
ALTER PROCEDURE dbo.text
(
@轧辊编号 nvarchar(50)='',
@出厂编号 nvarchar(50)=''
)
AS
--DECLARE @STR1 varchar(50)='' 这里改成
DECLARE @STR1 varchar(50)
set @STR1=''
IF (@出厂编号!='')
BEGIN
SET @STR1=@STR1+@出厂编号--这里
END
--DECLARE @STR2 varchar(50)='' --这
DECLARE @STR2 varchar(50)
set @STR2=''
BEGIN
IF (@出厂编号!='')
SET @STR2=@STR2+','+cast(@出厂编号 as varchar(50))
END
--DECLARE @STR varchar(200)='' --这
DECLARE @STR varchar(50)
set @STR=''
SET @STR=@STR+'INSERT INTO BasicInfo
(轧辊编号'+@STR1+')
VALUES
('+cast(@轧辊编号 as varchar(50))+@STR2+');'
EXEC(@STR)
RETURN

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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