最近使用Sql Server 2000 的经验

来源:互联网 发布:杨支柱知乎 编辑:程序博客网 时间:2024/06/05 19:37

下 午被数据库搞的莫名奇妙,总是出现如下错误:Syntax error converting the nvarchar value to a column of data type int 最后发现原因是在存储过程中return的值只能是简单类型int型,浪费了不少时间,现在把自己的遇到的知识总结下
1.在存储过程中执行带output型的存储过程 在sqlserver自带的sp dbo.dt_displayoaerror中有示例:
exec @hr = sp_OAGetErrorInfo @iObject, @vchSource OUT, @vchDescription OUT
其中@hr获取sp的return value. @iObject为输入值, @vchSource ,@vchDescription 都是输出值的到sp的output value

2.在数据库中,未赋值是null, 他和 '' 是不同的,不像一些语言会给字符型变量赋值为空. 因此对于为null的变量要通过 @temp=null来判断,或者用isnull函数.isnull的语法是ISNULL ( check_expression , replacement_value ) 如果check_expression 为null的话就用第二个参数进行替换.

3.关于存储过程的Return value和Output value.return值只能是数字型,但如果一个nvarchar类型的变量,且该变量中是数字可以隐式地转换为数字时,那么他将可以作为return值.同理,其他类型变量也一样.

在默认情况下一个存储过程的return value为0,表示这个存储过程被成功的执行,如果是非零值,则代表没有顺利执行.我们可以认为的返回对自己有用的数据,例如新增一个用户时,返回新增用户的UserID. 用法是:RETURN @usr_id,然后通过

由于return value存在的不足,我们还可以通过RecrodSet形式和output来返回数据.
下面是微软的帮助资料

SqlCommand sampleCMD = new SqlCommand("SampleProc", nwindConn);
sampleCMD.CommandType = CommandType.StoredProcedure;

SqlParameter sampParm = sampleCMD.Parameters.Add("RETURN_VALUE", SqlDbType.Int);
sampParm.Direction = ParameterDirection.ReturnValue;

sampParm = sampleCMD.Parameters.Add("@InputParm", SqlDbType.NVarChar, 12);
sampParm.Value = "Sample Value"

sampParm = sampleCMD.Parameters.Add("@OutputParm", SqlDbType.NVarChar, 28);
sampParm.Direction = ParameterDirection.Output;
nwindConn.Open();
SqlDataReader sampReader = sampleCMD.ExecuteReader();
Console.WriteLine("{0}, {1}", sampReader.GetName(0), sampReader.GetName(1));
while (sampReader.Read())
{
Console.WriteLine("{0}, {1}", sampReader.GetInt32(0), sampReader.GetString(1));
}
sampReader.Close();
nwindConn.Close(); //注意必须在DataReader关闭以后才能返回return value和output valve
Console.WriteLine(" @OutputParm: {0}", sampleCMD.Parameters["@OutputParm"].Value);
Console.WriteLine("RETURN_VALUE: {0}", sampleCMD.Parameters["RETURN_VALUE"].Value);

在sp中,需要在as前声明外部传来的参数,如果是output类型要显示声明.

 
原创粉丝点击