问题很简单。
我的数据库中有一列数据类型为NVARCHAR(20)。当我尝试输入包含22个字符的数据时,它只会忽略最后2个字符而不是抛出异常!
这是正常的吗?如何保护数据库免受此类问题的影响?
附注:当然,我使用验证控件和服务器验证,但我该如何保护数据库?是否有一种更高级的约束条件,可以抛出异常并拒绝输入的日期?
我的数据库中有一列数据类型为NVARCHAR(20)。当我尝试输入包含22个字符的数据时,它只会忽略最后2个字符而不是抛出异常!
这是正常的吗?如何保护数据库免受此类问题的影响?
附注:当然,我使用验证控件和服务器验证,但我该如何保护数据库?是否有一种更高级的约束条件,可以抛出异常并拒绝输入的日期?
try
{
using (SqlConnection conn = new SqlConnection(ConnStr))
{
string Command = "SET NOCOUNT ON; INSERT INTO [Countries] (CountryName, IsVisible) VALUES (@Name, @IsVisible);";
using (SqlCommand comm = new SqlCommand(Command, conn))
{
comm.Parameters.Add("@Name", System.Data.SqlDbType.NVarChar, 20);
comm.Parameters["@Name"].Value = Name;
comm.Parameters.Add("@IsVisible", System.Data.SqlDbType.Bit);
comm.Parameters["@IsVisible"].Value = IsVisible;
conn.Open();
comm.ExecuteNonQuery();
return "Successfully added " + Name + " to the countries.";
}
}
}
catch (SqlException SqlEx)
{
string ErrorMessage = "";
for (int i = 0; i < SqlEx.Errors.Count; i++)
{
ErrorMessage += SqlEx.Errors[i].Number + " : " + SqlEx.Errors[i].Message + "\n";
}
return ErrorMessage;
}
这是我正在使用的代码,顺便说一下,我刚刚尝试从Sql Management Studio直接插入比列长度更大的数据,它实际上显示了你刚才描述的消息!