准备好的语句 C#:无法在 System.Data.SQLite.SQLiteParameter 上转换 System.Data.SqlClient.SqlParameter 对象?
Prepared Statement C#: Impossible casting of System.Data.SqlClient.SqlParameter object on System.Data.SQLite.SQLiteParameter?
在 C# 应用程序中,我有以下 SQLiteDatabase:
"CREATE TABLE FOLDER(FolderPath TEXT," + "User TEXT," + "ParentPath TEXT," +
"TimestampFolder DATETIME DEFAULT CURRENT_TIMESTAMP," + "TimestampParent DATETIME,"
+ "Present TEXT DEFAULT 'True'," + [...] )
在此准备好的语句中:
SQLiteCommand command = new SQLiteCommand(null, SQLconnection);
command.CommandText = "BEGIN TRANSACTION; "+ "INSERT INTO FOLDER (FolderPath, User, ParentPath, TimestampParent, Present)" + "VALUES (@uCpath, @uname, @pp, @date, @bool)" + "END TRANSACTION;";
SqlParameter unameParam = new SqlParameter("@uname", SqlDbType.Text, 100);
SqlParameter uCpathParam = new SqlParameter("@uCpath", SqlDbType.Text, 300);
SqlParameter uSpathParam = new SqlParameter("@uSpath", SqlDbType.Text, 300);
SqlParameter ppParam = new SqlParameter("@pp", SqlDbType.Text, 100);
SqlParameter dateParam = new SqlParameter("@date", SqlDbType.DateTime);
SqlParameter boolParam = new SqlParameter("@bool", SqlDbType.Text, 100);
unameParam.Value = user.Username;
uCpathParam.Value = user.ClientPath;
uSpathParam.Value = user.ServerPath;
ppParam.Value = null;
dateParam.Value = DateTime.MinValue.ToString("yyyy-MM-dd HH:mm:ss");
boolParam.Value = true.ToString();
command.Parameters.Add(unameParam);
command.Parameters.Add(uCpathParam);
command.Parameters.Add(uSpathParam);
command.Parameters.Add(ppParam);
command.Parameters.Add(dateParam);
command.Parameters.Add(boolParam);
command.Prepare();
command.ExecuteNonQuery();
产生以下运行时间异常:
无法将 'System.Data.SqlClient.SqlParameter' 对象转换为“System.Data.SQLite.SQLiteParameter”类型。
我用谷歌搜索并尝试将 SqlDbType.DateTime 更改为 SqlDbType.DateTime2 或 SqlDbType.Date 或 SqlDbType.TImestamp,但启动了相同的异常。有什么建议吗?
谢谢
您在不同的数据库类型之间混用 classes。
如果您要连接到 SQLite 数据库,则必须使用相应的 classes 但您使用的是 SqlParameter
来自 SQL 服务器 class 层次结构。
只需在您的代码中将 SqlParameter
替换为 SQLiteParameter
,它应该会工作得更好。
在 C# 应用程序中,我有以下 SQLiteDatabase:
"CREATE TABLE FOLDER(FolderPath TEXT," + "User TEXT," + "ParentPath TEXT," +
"TimestampFolder DATETIME DEFAULT CURRENT_TIMESTAMP," + "TimestampParent DATETIME,"
+ "Present TEXT DEFAULT 'True'," + [...] )
在此准备好的语句中:
SQLiteCommand command = new SQLiteCommand(null, SQLconnection);
command.CommandText = "BEGIN TRANSACTION; "+ "INSERT INTO FOLDER (FolderPath, User, ParentPath, TimestampParent, Present)" + "VALUES (@uCpath, @uname, @pp, @date, @bool)" + "END TRANSACTION;";
SqlParameter unameParam = new SqlParameter("@uname", SqlDbType.Text, 100);
SqlParameter uCpathParam = new SqlParameter("@uCpath", SqlDbType.Text, 300);
SqlParameter uSpathParam = new SqlParameter("@uSpath", SqlDbType.Text, 300);
SqlParameter ppParam = new SqlParameter("@pp", SqlDbType.Text, 100);
SqlParameter dateParam = new SqlParameter("@date", SqlDbType.DateTime);
SqlParameter boolParam = new SqlParameter("@bool", SqlDbType.Text, 100);
unameParam.Value = user.Username;
uCpathParam.Value = user.ClientPath;
uSpathParam.Value = user.ServerPath;
ppParam.Value = null;
dateParam.Value = DateTime.MinValue.ToString("yyyy-MM-dd HH:mm:ss");
boolParam.Value = true.ToString();
command.Parameters.Add(unameParam);
command.Parameters.Add(uCpathParam);
command.Parameters.Add(uSpathParam);
command.Parameters.Add(ppParam);
command.Parameters.Add(dateParam);
command.Parameters.Add(boolParam);
command.Prepare();
command.ExecuteNonQuery();
产生以下运行时间异常: 无法将 'System.Data.SqlClient.SqlParameter' 对象转换为“System.Data.SQLite.SQLiteParameter”类型。
我用谷歌搜索并尝试将 SqlDbType.DateTime 更改为 SqlDbType.DateTime2 或 SqlDbType.Date 或 SqlDbType.TImestamp,但启动了相同的异常。有什么建议吗? 谢谢
您在不同的数据库类型之间混用 classes。
如果您要连接到 SQLite 数据库,则必须使用相应的 classes 但您使用的是 SqlParameter
来自 SQL 服务器 class 层次结构。
只需在您的代码中将 SqlParameter
替换为 SQLiteParameter
,它应该会工作得更好。