我正在使用c#,我无法获得任何vaue。数据返回null。这是我的代码。
SQLiteConnection DBConnection;
DBConnection = GetMyconnection();
DBConnection.Open();
string DBCommand = "SELECT * FROM settings WHERE setting_key = '" + setting_key + "' LIMIT 1";
using (SQLiteCommand sqlCommand = new SQLiteCommand(DBCommand, DBConnection))
{
using (SQLiteDataReader DBDataReader = sqlCommand.ExecuteReader())
{
if (DBDataReader.Read())
{
object data = sqlCommand.ExecuteScalar();
return DBDataReader.GetString(DBDataReader.GetOrdinal("setting_value"));
}
else
{
return "Error";
}
}
}
DBConnection.Close();
此代码放在一个全局帮助函数中,我从表单中调用它。
请帮助。
答案 0 :(得分:1)
主要项目是看到你在与ExecuteReader相同的命令上运行了一个ExecuteScalar,我看不出原因。我注意到的其他事情是你连接语句而不是使用参数,你只需要一个值但是使用SELECT *
,并且没有异常处理。我会在settingkey
列上有一个唯一索引来加速查询并防止重复,因此您不需要在命令上加LIMIT 1
< / p>
我尝试使用尽可能多的代码。我更改了SQL命令以获取您想要的一个值,仅使用ExecuteScalar方法,并使用条件运算符而不是if...then
块。实际命令已包含在try...catch
中以进行异常处理,并将提供错误反馈
string ReturnValue;
SQLiteConnection DBConnection;
DBConnection = GetMyconnection();
DBConnection.Open();
string DBCommand = "SELECT setting_value FROM settings WHERE setting_key = @settingkey LIMIT 1";
using (SQLiteCommand sqlCommand = new SQLiteCommand(DBCommand, DBConnection)) {
sqlCommand.parameters.AddWithValue("@settingkey", setting_key);
try {
object data = sqlCommand.ExecuteScalar();
ReturnValue = (data != null) ? data.ToString() : "Error";
}
catch (Exception ex) { ReturnValue = "Exception: " + ex.Message; }
}
DBConnection.Close();
return ReturnValue;
答案 1 :(得分:0)
此代码读取行列表,但如果您的查询正常工作。
string sql = "SELECT * FROM settings WHERE setting_key = '" + setting_key + "' LIMIT 1";
SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection);
SQLiteDataReader reader = command.ExecuteReader();
while (reader.Read())
Console.WriteLine("Name: " + reader["setting_value"] + "\tScore: " + reader["score"]);