sqlite - 获取单个列值 - 不工作

时间:2017-06-14 10:46:19

标签: c# sqlite

我正在使用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();

此代码放在一个全局帮助函数中,我从表单中调用它。

请帮助。

2 个答案:

答案 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"]);