【发布时间】:2013-05-27 05:44:01
【问题描述】:
在我的项目中,我使用随机数生成器函数生成一个随机字符并将其存储在数据库中,该数字生成正确,但在插入数据期间它抛出异常 “字符串或二进制数据将是截断”
我的代码:
protected void trigger()
{
try
{
DataSet ds = ExamManagement.SP.table2_SP_Selectall().GetDataSet();
if (ds.Tables[0].Rows.Count > 0)
{
string a = RandomNumberGenerator(4);
string b = RandomNumberGenerator(4);
string c = RandomNumberGenerator(4);
ExamManagement.SP.table1_insert(a,b,c).Execute();
}
}
catch (SqlException ex)
{
ClientMessaging("Error :"+ex);
}
}
public static string RandomNumberGenerator(int length)
{
System.Security.Cryptography.RandomNumberGenerator rng = System.Security.Cryptography.RandomNumberGenerator.Create();
char[] chars = new char[length];
//based on your requirment you can take only alphabets or number
string validChars = "aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXzZ";
byte[] bytes = new byte[length-1];
for (int i = 0; i < length; i++)
{
rng.GetBytes(bytes);
Random rnd = new Random(bytes[0]);
chars[i] = validChars[rnd.Next(validChars.Length)];
}
return (new string(chars));
}
我的 SQL Server 表结构:
Column1, nvarchar(100),null
Column2, nvarchar(100),null
Column3, nvarchar(100),null
我改变的存储过程是,
Create Procedure Table1_insert
(
@col1 varchar(max),
@col2 varchar(max),
@col3 varchar(max)
)
as
BEGIN
BEGIN TRY
Insert into Table1(Column1,Column2,Column3) values (@col1,@col2,@col3)
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK
DECLARE @ErrMsg nvarchar(4000), @ErrSeverity int
SELECT @ErrMsg = ERROR_MESSAGE(),
@ErrSeverity = ERROR_SEVERITY()
RAISERROR(@ErrMsg, @ErrSeverity, 1)
END CATCH
END
【问题讨论】:
-
此消息表示您要填写的内容不适合您的列。因此,您的一列中可能有 100 多个字符。在将变量插入数据库以查看之前,计算变量并输出它。
-
@Yvesr 我已经用 Clientmessaging 检查过了,Randomnumbergenerator 函数只生成四个字符,例如:sDfT
-
数据大于字段长度不是很明显吗?
-
尝试使用
SQL Profiler并查看插入表中的实际值 -
@praveen 我没有“SQL Profiler”,因为我系统中安装的 SQL Server 是 SQL Server 2008
标签: c# sql-server