带有C#参数化字符串插入的SQLite将存储为数字
此命令导致数据库中出现错误。如果我插入一组数据,它会将text2值转换为double,而不仅仅是值为“123”的文本 如何在sqllite驱动程序中禁用自动转换 表定义:带有C#参数化字符串插入的SQLite将存储为数字,c#,sqlite,C#,Sqlite,此命令导致数据库中出现错误。如果我插入一组数据,它会将text2值转换为double,而不仅仅是值为“123”的文本 如何在sqllite驱动程序中禁用自动转换 表定义: using (SQLiteCommand cmd = ctx.DB.Query("INSERT INTO tableName(Text1, Text2) VALUES (@text1, @text2)")) { cmd.Prepare(); cmd.Parameters.AddWithValue("@t
using (SQLiteCommand cmd = ctx.DB.Query("INSERT INTO tableName(Text1, Text2) VALUES (@text1, @text2)"))
{
cmd.Prepare();
cmd.Parameters.AddWithValue("@text1","abc");
cmd.Parameters.AddWithValue("@text2", "123");
cmd.ExecuteNonQuery();
}
编辑:
结果导致异常:
例外情况是:
cmd.Parameters.AddWithValue("@text1", SqlDbType.Text).Value = "abc";
cmd.Parameters.AddWithValue("@text2", SqlDbType.Text).Value = "123";
cmd.ExecuteNonQuery();
感谢@DourHighArch的提示显示表定义。我不知道这是否是SQLite的问题,但在SQL Server中将数字字符串更改为
INT
s。您应该改为使用cmd.Parameters.Add(“@Parameter”,SqlDbType.Foo,…).Value=…
@DourHighArch已经测试过了。导致异常使用本机sql插入代码写入它会导致有效的插入您仍在使用.AddWithValue
,请使用.Add
。从堆栈跟踪来看,SQLite似乎也在执行text->INT操作。
cmd.Parameters.AddWithValue("@text1", SqlDbType.Text).Value = "abc";
cmd.Parameters.AddWithValue("@text2", SqlDbType.Text).Value = "123";
cmd.ExecuteNonQuery();
Conversion Exception wrong format
at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
at System.String.System.IConvertible.ToInt32(IFormatProvider provider)
at System.Convert.ToInt32(Object value, IFormatProvider provider)
at System.Data.SQLite.SQLiteStatement.BindParameter(Int32 index, SQLiteParameter param) in c:\dev\sqlite\dotnet\System.Data.SQLite\SQLiteStatement.cs:Line 481.
at System.Data.SQLite.SQLiteStatement.BindParameters() in c:\dev\sqlite\dotnet\System.Data.SQLite\SQLiteStatement.cs:Line 237.
at System.Data.SQLite.SQLiteCommand.BuildNextCommand() in c:\dev\sqlite\dotnet\System.Data.SQLite\SQLiteCommand.cs:Line 388.
at System.Data.SQLite.SQLiteCommand.GetStatement(Int32 index) in c:\dev\sqlite\dotnet\System.Data.SQLite\SQLiteCommand.cs:Line 395.
at System.Data.SQLite.SQLiteDataReader.NextResult() in c:\dev\sqlite\dotnet\System.Data.SQLite\SQLiteDataReader.cs:Line 1864.
at System.Data.SQLite.SQLiteDataReader..ctor(SQLiteCommand cmd, CommandBehavior behave) in c:\dev\sqlite\dotnet\System.Data.SQLite\SQLiteDataReader.cs:Line 123.
at System.Data.SQLite.SQLiteCommand.ExecuteReader(CommandBehavior behavior) in c:\dev\sqlite\dotnet\System.Data.SQLite\SQLiteCommand.cs:Line 942.
at System.Data.SQLite.SQLiteCommand.ExecuteNonQuery(CommandBehavior behavior) in c:\dev\sqlite\dotnet\System.Data.SQLite\SQLiteCommand.cs:Line 990.
at System.Data.SQLite.SQLiteCommand.ExecuteNonQuery() in c:\dev\sqlite\dotnet\System.Data.SQLite\SQLiteCommand.cs:Line 975.
using (SQLiteCommand cmd = ctx.DB.Query("INSERT INTO tableName(Text1, Text2) VALUES (@text1, @text2)"))
{
cmd.Prepare();
cmd.Parameters.Add("@text1", DbType.AnsiString).Value = "abc";
cmd.Parameters.Add("@text2", DbType.AnsiString).Value = "123";
cmd.ExecuteNonQuery();
}