gpt4 book ai didi

c# - SQLite 插入带参数的字符串数据导致无效强制转换异常

转载 作者:行者123 更新时间:2023-11-30 17:27:50 29 4
gpt4 key购买 nike

早上好

我正在为我们的 SQLite 3 数据库代码进行一些单元测试,遇到了这个有趣的问题。这是一个出色通过的单元测试:

[Fact]
public void TestDB()
{
FileInfo fi = new FileInfo(Path.GetTempPath() + Guid.NewGuid().ToString() + ".sqlite");
using (SQLiteConnection conn = new SQLiteConnection($"Data Source={fi.FullName};Version=3;"))
{
conn.Open();
conn.ExecuteNonQuery("CREATE Table Temp(A INTEGER NOT NULL PRIMARY KEY, B STRING);");

string sql = "INSERT INTO Temp (A, B) VALUES (@A, @B)";
string s = "Test";
using (SQLiteCommand command = new SQLiteCommand(sql, conn))
{
command.Parameters.Add("@A", System.Data.DbType.Int32).Value = 1;
command.Parameters.Add("@B", System.Data.DbType.String).Value = s;
command.ExecuteNonQuery();
}

sql = $"SELECT B FROM Temp WHERE A = 1";
using (SQLiteCommand command = new SQLiteCommand(sql, conn))
using (SQLiteDataReader reader = command.ExecuteReader())
{
bool read = reader.Read();
Assert.True(read);
if (read)
{
Assert.False(reader.IsDBNull(0));
string b = reader.GetString(0);
Assert.Equal(s, b);
}
}
}
}

但是如果我改变一行:

string s = "1";

InvalidCastExceptionreader.GetString(0) 行被抛出。考虑通过指定列可能需要额外的提示,我也试过这个:

SQLiteParameter a = new SQLiteParameter("@A", System.Data.DbType.Int32, "A") { Value = 1 };
SQLiteParameter b = new SQLiteParameter("@B", System.Data.DbType.String, "B") { Value = s };
command.Parameters.Add(a);
command.Parameters.Add(b);

没有任何变化。

有人知道如何使用参数并将数据插入数据为数字字符串的字符串列吗?

最佳答案

@steve16351 给出了答案。

问题实际上出在 CREATE TABLE 中,其中 B 列的类型为 STRING。 SQLite 使用 TEXT 类型。

将其更改为:CREATE TABLE Temp(A INTEGER NOT NULL PRIMARY KEY, B TEXT); 解决了问题。

谢谢!

关于c# - SQLite 插入带参数的字符串数据导致无效强制转换异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54296324/

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