当我引入nume(表示姓氏)和prenume(表示姓氏)时,出现错误。奇怪的是,当name和prenume具有int值时,该程序将起作用。请帮助我
float medie = (float) Suma / numar_materii;
SQLiteConnection connection = new SQLiteConnection(LoadConnectionString());
connection.Open();
const string sql = @"INSERT INTO Users (Nume,Prenume,Medie) VALUES (@Nume ,@Prenume,@Medie)";
SQLiteCommand command = new SQLiteCommand(sql, connection);
command.Parameters.Add(new SQLiteParameter("@Nume", SqlDbType.NVarChar) { Value = namee.Text }) ;
command.Parameters.Add(new SQLiteParameter("@Prenume", SqlDbType.NVarChar) { Value = Prenume.Text});
command.Parameters.Add(new SQLiteParameter("@Medie", SqlDbType.Real) { Value = medie });
command.ExecuteNonQuery();
executenonquery后输入字符串格式不正确
答案 0 :(得分:0)
问题是SQLiteCommand
没有以SqlDbType
作为参数的构造函数。因此,选择了构造函数SQLiteParameter(string parameterName, object value)
。
SqlDbType.NVarChar
转换为相应的Int32
值(在这种情况下为12),并且参数的DbType
自动解析为Int32.DbType
,因为C#中的Enums只是命名常数的集合。
在初始化程序中,您使用类型为string
的值来更改参数的值,SQLite无法将新值转换为Int32
并抛出FormatException
。
您可以使用DbType
代替SqlDbType
command.Parameters.Add(new SQLiteParameter("@Nume", DbType.String) { Value = namee.Text });
command.Parameters.Add(new SQLiteParameter("@Prenume", DbType.String) { Value = Prenume.Text });
command.Parameters.Add(new SQLiteParameter("@Medie", DbType.Double) { Value = medie });
或通过让SQLiteParameter为您选择正确的DbType
command.Parameters.Add(new SQLiteParameter("@Nume", namee.Text));
command.Parameters.Add(new SQLiteParameter("@Prenume", Prenume.Text));
command.Parameters.Add(new SQLiteParameter("@Medie", medie));