C# “;为命令提供的参数不足”;执行SQLite查询时出错
我试图使用Windows窗体文本框中的值作为SQLite查询的输入。基本上,我加载SQL并尝试设置参数(在本例中,是查询的“键”) 以下是我当前的代码:C# “;为命令提供的参数不足”;执行SQLite查询时出错,c#,parameters,sqlite,visual-studio-2013,C#,Parameters,Sqlite,Visual Studio 2013,我试图使用Windows窗体文本框中的值作为SQLite查询的输入。基本上,我加载SQL并尝试设置参数(在本例中,是查询的“键”) 以下是我当前的代码: try { string connectionString = @" Data Source = c:\milap\milap.s3db; Version = 3"; var conn = new SQLiteConnection(connectionString); var conn = new SQLiteConne
try {
string connectionString = @" Data Source = c:\milap\milap.s3db; Version = 3";
var conn = new SQLiteConnection(connectionString);
var conn = new SQLiteConnection(connectionString);
SQLiteCommand cmd = new SQLiteCommand();
cmd.Connection = conn;
conn.Open();
cmd.CommandText = "select VC1ON from table where trim(key)= @KEY";
SQLiteCommand command = new SQLiteCommand(cmd.CommandText, conn);
cmd.Parameters.AddWithValue("@KEY", key.Text);
SQLiteDataReader reader = command.ExecuteReader();
while (reader.Read()) {
ON1.Text = reader["VC1ON"].ToString();
}
} catch (Exception ex) {
MessageBox.Show(ex.Message);
}
这总是让我感到:
SQLite错误提供给命令的参数不足
我也尝试过:
SQLiteParameter param = new SQLiteParameter();
param.ParameterName = "@KEY";
param.Value = key.Text;
cmd.Parameters.Add(param);
以及:
cmd.Parameters.AddWithValue("@KEY", key.Text);
没有运气。有什么想法吗?您有两个独立的命令:
cmd.CommandText = "select VC1ON from table where trim(key)= @KEY";
SQLiteCommand command = new SQLiteCommand(cmd.CommandText, conn);
cmd.Parameters.AddWithValue("@KEY", key.Text);
SQLiteDataReader reader = command.ExecuteReader();
您已将参数值指定给cmd
,但同时实际执行的是命令
将cmd.Parameters
更改为command.Parameters
,这可能会使您启动并运行,但您必须清理代码。(您也有重复的连接实例,但这是无效的,因为它们甚至有相同的名称…)
这里有一个清理代码的快速尝试,但它正在运行中,因此您可能需要调整它以使其编译。使用
块可确保您处置资源
try
{
string connectionString = @" Data Source = c:\milap\milap.s3db; Version = 3";
using (var conn = new SQLiteConnection(connectionString))
{
using (var cmd = new SQLiteCommand())
{
cmd.Connection = conn;
cmd.CommandText = "select VC1ON from table where trim(key)= @KEY";
conn.Open();
cmd.Parameters.AddWithValue("@KEY", key.Text);
var reader = cmd.ExecuteReader();
while (reader.Read())
ON1.Text = reader["VC1ON"].ToString();
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
您有两个独立的命令:
cmd.CommandText = "select VC1ON from table where trim(key)= @KEY";
SQLiteCommand command = new SQLiteCommand(cmd.CommandText, conn);
cmd.Parameters.AddWithValue("@KEY", key.Text);
SQLiteDataReader reader = command.ExecuteReader();
您已将参数值指定给cmd
,但同时实际执行的是命令
将cmd.Parameters
更改为command.Parameters
,这可能会使您启动并运行,但您必须清理代码。(您也有重复的连接实例,但这是无效的,因为它们甚至有相同的名称…)
这里有一个清理代码的快速尝试,但它正在运行中,因此您可能需要调整它以使其编译。使用
块可确保您处置资源
try
{
string connectionString = @" Data Source = c:\milap\milap.s3db; Version = 3";
using (var conn = new SQLiteConnection(connectionString))
{
using (var cmd = new SQLiteCommand())
{
cmd.Connection = conn;
cmd.CommandText = "select VC1ON from table where trim(key)= @KEY";
conn.Open();
cmd.Parameters.AddWithValue("@KEY", key.Text);
var reader = cmd.ExecuteReader();
while (reader.Read())
ON1.Text = reader["VC1ON"].ToString();
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
您有两个独立的命令:
cmd.CommandText = "select VC1ON from table where trim(key)= @KEY";
SQLiteCommand command = new SQLiteCommand(cmd.CommandText, conn);
cmd.Parameters.AddWithValue("@KEY", key.Text);
SQLiteDataReader reader = command.ExecuteReader();
您已将参数值指定给cmd
,但同时实际执行的是命令
将cmd.Parameters
更改为command.Parameters
,这可能会使您启动并运行,但您必须清理代码。(您也有重复的连接实例,但这是无效的,因为它们甚至有相同的名称…)
这里有一个清理代码的快速尝试,但它正在运行中,因此您可能需要调整它以使其编译。使用
块可确保您处置资源
try
{
string connectionString = @" Data Source = c:\milap\milap.s3db; Version = 3";
using (var conn = new SQLiteConnection(connectionString))
{
using (var cmd = new SQLiteCommand())
{
cmd.Connection = conn;
cmd.CommandText = "select VC1ON from table where trim(key)= @KEY";
conn.Open();
cmd.Parameters.AddWithValue("@KEY", key.Text);
var reader = cmd.ExecuteReader();
while (reader.Read())
ON1.Text = reader["VC1ON"].ToString();
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
您有两个独立的命令:
cmd.CommandText = "select VC1ON from table where trim(key)= @KEY";
SQLiteCommand command = new SQLiteCommand(cmd.CommandText, conn);
cmd.Parameters.AddWithValue("@KEY", key.Text);
SQLiteDataReader reader = command.ExecuteReader();
您已将参数值指定给cmd
,但同时实际执行的是命令
将cmd.Parameters
更改为command.Parameters
,这可能会使您启动并运行,但您必须清理代码。(您也有重复的连接实例,但这是无效的,因为它们甚至有相同的名称…)
这里有一个清理代码的快速尝试,但它正在运行中,因此您可能需要调整它以使其编译。使用
块可确保您处置资源
try
{
string connectionString = @" Data Source = c:\milap\milap.s3db; Version = 3";
using (var conn = new SQLiteConnection(connectionString))
{
using (var cmd = new SQLiteCommand())
{
cmd.Connection = conn;
cmd.CommandText = "select VC1ON from table where trim(key)= @KEY";
conn.Open();
cmd.Parameters.AddWithValue("@KEY", key.Text);
var reader = cmd.ExecuteReader();
while (reader.Read())
ON1.Text = reader["VC1ON"].ToString();
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
谢谢你,格兰特!它就像一个符咒。我知道问题出在哪里?!什么改变了?!谢谢你,格兰特!它就像一个符咒。我知道问题出在哪里?!什么改变了?!谢谢你,格兰特!它就像一个符咒。我知道问题出在哪里?!什么改变了?!谢谢你,格兰特!它就像一个符咒。我知道问题出在哪里?!什么改变了?!