【发布时间】:2014-04-16 22:48:35
【问题描述】:
我已经定义了输出参数,如下所示:
C#:
scom.Parameters.Add("@User_ID",SqlDbType.VarChar,8).Direction = ParameterDirection.Output ;
Sql:
@User_ID varchar(8) output
我在 Sql Server 中执行过程时得到完整的字符串,但在 C# 中只得到第一个字符。我进行了很多搜索,并确保在 C# 和 Sql 中都定义了大小。即使我尝试使用固定长度字符(Char(8)),但仍然只获得 C# 中的第一个字符。请让我知道是什么问题。
C# 代码:
public bool CheckPhone(string phoneNumber)
{
SqlConnection myconn=new SqlConnection(connectionString);
try
{
myconn.Open();
SqlCommand scom = new SqlCommand("AuthenticatePhone", myconn);
scom.CommandType = CommandType.StoredProcedure;
scom.Parameters.Add("@phoneNumber", SqlDbType.BigInt).Value = Convert.ToInt64(phoneNumber);
scom.Parameters.Add("@User_ID", SqlDbType.Char, 8).Direction = ParameterDirection.Output;
scom.Parameters.Add("@User_Name", SqlDbType.Char, 120).Direction = ParameterDirection.Output;
scom.ExecuteNonQuery();
if (scom.Parameters["@User_Name"] == null)
{
return false;
}
else
{
UserID = (string)scom.Parameters["@User_ID"].Value;//.ToString();
UserName = (string)scom.Parameters["@User_Name"].Value;//.ToString();
myconn.Close();
return true;
}
}
catch (Exception e)
{
string error = e.InnerException + e.Message;
}
finally
{
myconn.Close();
}
return false;
}
Sql:
Create procedure dbo.AuthenticatePhone
@phoneNumber numeric(11,0) ,
@User_ID varchar(8) output ,
@User_Name varchar(120) output
as
begin
Select @User_ID = convert(varchar(8),[User_ID]) ,
@User_Name = [User_Name]
from dbo.NRE_Users
where PhoneNumber = @phoneNumber
;
print @User_ID
print @User_Name
end
【问题讨论】:
-
你试过使用
SqlDbType.VarChar吗?Char与您的过程定义不匹配。 -
是的,我检查了 VarChar,但它不起作用。
-
@User_Name 是否返回其所有字符?
-
不,它没有返回。我不确定可能是什么问题。现在我没有使用存储过程。我正在通过 sql 适配器执行 sql 查询。
标签: c# sql-server parameters output