gpt4 book ai didi

c# - 在 SQL Server 中转换为二进制后如何在 C# 中取回字符串

转载 作者:行者123 更新时间:2023-11-30 23:07:15 27 4
gpt4 key购买 nike

我有字符串值键:

TxtProductKey.Text has value "key"

编码这个值

 byte[] Key = Encoding.ASCII.GetBytes(TxtProductKey.Text.Trim());

将其保存在数据库表中数据类型为 binary(50) null 的列中。

表中的值如下所示:

0x6B00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

现在我试图将它取回我输入的字符串值是 Key

byte [] TempKey = (byte[])LicenseInfo.Tables[0].Rows[0]["ProductKey"];
var newText = Encoding.ASCII.GetString(TempKey);

但我在 newText 中得到的结果是:

k\0\0\0\0\0\00\

我哪里做错了?希望大家多提建议

在数据库中保存值的 C# 代码:

Sqlconnection.Open();

SqlCommand Cmd = new SqlCommand("SpAddAttempts", Sqlconnection);
Cmd.CommandType = CommandType.StoredProcedure;
Cmd.Parameters.Add("@Attempts", SqlDbType.Int).Value = Attempt;
Cmd.Parameters.Add("@Activate", SqlDbType.Bit).Value = Activate;
Cmd.Parameters.Add("@Key", SqlDbType.Binary).Value = Key;

Cmd.ExecuteNonQuery();
CloseConnection();

存储过程是:

ALTER PROCEDURE [dbo].[SpAddAttempts]
@Attempts INT,
@Activate BIT,
@Key BINARY
AS
BEGIN
UPDATE License
SET Attempts = @Attempts,
Activate = @Activate,
ProductKey = @Key
WHERE LicenseId = '1'
END

最佳答案

我不认为你可以:你只在你的数据库表中存储了一个字节(相当于 char k)。0x68 是 k,下一个byte 是 0x00 - ascii null - 字符串终止符 - 无论你选择的语言如何调用它,它绝对不是 e

所以,因为只保留了第一个字节,其余为 ascii NUL 000000000000000000000000....),无法知道其余值是否为 ey, eyboard, oolaid 等。错误是在表中存储值的过程中(您没有显示该部分的代码)-它仅存储了第一个字节

我建议您将此文本存储为文本,而不是二进制;当它开始以文本形式存在并且您显然希望它以文本形式返回时,将其存储为二进制文件似乎是一个不必要的痛苦世界。

编辑:现在您已经发布了执行保存的代码,我可以看到您已将参数声明为二进制类型,但您没有指定长度,因此长度默认为 1 个字节。这就是为什么只有一个字节被保存。您需要更像这样声明参数:

cmd.Parameters.Add("@Key", SqlDbType.Binary, binaryData.Length); //dont pass an array longer than what the table can store, or you'll get a "data would be truncated" error

关于c# - 在 SQL Server 中转换为二进制后如何在 C# 中取回字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47484884/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com