c# - 从 c# 调用存储过程返回“?????” 在 varchar 响应中
问题描述
当我使用 ADO.NET 从 C# 调用 SQL Server 上的存储过程时,我在输出参数中收到以下响应:
从字面上看??????
,作为VarChar
.
我的存储过程如下所示:
ALTER Procedure [sp_getEncryptedPassword]
(@PublicKey nvarchar(128), @UserId uniqueidentifier, @PasswordClearText varchar(255) OUTPUT, @resOUT int OUTPUT, @rowsOUT int OUTPUT)
AS
SET NOCOUNT On
DECLARE @LinkIsValid bit = 0;
set @rowsOUT=0
while (@LinkIsValid=0)
begin
SELECT CONVERT(nvarchar, DecryptByPassphrase(@PublicKey, UserpasswordEncrypted, 1, CONVERT(varbinary, @UserId))) AS PassWordClearText
Into #TEMP1
from UserLogin
WHERE Userid = @UserId
set @rowsOUT=@@ROWCOUNT
SET @LinkIsValid=1
end
if @rowsOUT=0
SET @resOUT=1
select 'RStestPwd' as 'PasswordClearText', @resOUT as 'resOUT', @rowsOUT as 'rowsOUT'
我已经删除了一些行,但我希望你明白这一点。
作为调试的一部分,我已经硬编码了一个响应——只是为了看看我是否得到了什么。我这样做:
我的 C# 代码:
SqlConnection con = new SqlConnection(connectionstring);
SqlCommand cmd = new SqlCommand(spName, con);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter pubKey = cmd.Parameters.Add("@PublicKey", SqlDbType.UniqueIdentifier);
pubKey.Direction = ParameterDirection.Input;
pubKey.Value = publicKey;
SqlParameter IdIn = cmd.Parameters.Add("@UserId", SqlDbType.UniqueIdentifier);
IdIn.Direction = ParameterDirection.Input;
IdIn.Value = userid;
SqlParameter pwdOUT = cmd.Parameters.Add("@PasswordClearText", SqlDbType.VarChar, 255);
pwdOUT.Direction = ParameterDirection.Output;
SqlParameter resOUT = cmd.Parameters.Add("@resOUT", SqlDbType.Int);
resOUT.Direction = ParameterDirection.Output;
SqlParameter rowsOUT = cmd.Parameters.Add("@rowsOUT", SqlDbType.Int);
rowsOUT.Direction = ParameterDirection.Output;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
result.Password = pwdOUT.Value.ToString();
它是 SQL 服务器和我的应用程序之间格式的一部分吗?它是我的 SQL 服务器、我的 ADO.NET 命令实例还是我的连接字符串中的设置?
编辑:感谢您的评论。我已经查看了我的代码,并用 (N)VarChar 等修改了地方。
在这些修改之前或之后,我都没有得到任何例外 - 只是问号。所以 SP 正在工作 - 但松散/修改数据库和应用程序之间的数据......
解决方案
推荐阅读
- c# - 重新启动游戏而不退出应用程序
- java - MATLAB java.util.zip.ZipException:读取 zraw 时存储的块长度无效
- node.js - 如何修复保管箱节点 api 错误 400 请求标头或 Cookie 太大
- excel - Countifs 语句中的多个条件范围
- google-chrome-extension - 在制作 chrome 扩展时,用我自己的脚本替换网站调用的脚本
- angular - 在 ngFor 循环中禁用按钮
- c# - 从字符串馈送 CheckedListBox
- laravel - 如何在控制器中传递用户名?
- c++ - constexpr 静态 std::array
使用 MSVC2013 编译失败 - reactjs - 查找对象数组的 id 并使用反应中的 url 参数在页面上动态显示其数据