是否可以使用C#在SQLite中获取列名(标题)?

时间:2013-06-24 20:57:29

标签: c# wpf sqlite

如果表和列在sqlite中生成代码后,是否可以获取列名(Header)?

尝试了这个,但它失败了:

SQLiteCommand cmd = new SQLiteCommand();

string sSQL = "Select * from tblUser Where username = '" + txtUsername.Text + "'";
cmd.CommandText = sSQL;
cmd.Connection = clsCon.con;
SQLiteDataReader dr2;
dr2 = cmd.ExecuteReader();
string columnName = dr2.GetName(1);
dr2.Read();

if (dr2.HasRows)
{
    MessageBox.Show("Username Already Exist!", "SQLite Test Application", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
    txtUsername.Focus();
}

2 个答案:

答案 0 :(得分:8)

1)确保数据库已打开

2)确保命令与连接

连接

3)确保您没有收到任何错误

4)遍历列名

var cmd = new SQLiteCommand("select * from t1", db);
var dr = cmd.ExecuteReader();
for (var i = 0; i < dr.FieldCount; i++)
{
    Console.WriteLine(dr.GetName(i));
}

答案 1 :(得分:2)

根据muratgu提供的答案,我创建了以下方法:

    /// <summary>
    /// Checks if the given table contains a column with the given name.
    /// </summary>
    /// <param name="tableName">The table in this database to check.</param>
    /// <param name="columnName">The column in the given table to look for.</param>
    /// <param name="connection">The SQLiteConnection for this database.</param>
    /// <returns>True if the given table contains a column with the given name.</returns>
    public static bool ColumnExists(string tableName, string columnName, SQLiteConnection connection)
    {
        var cmd = new SQLiteCommand("PRAGMA table_info(" + tableName + ")", connection);
        var dr = cmd.ExecuteReader();
        while (dr.Read())//loop through the various columns and their info
        {
            var value = dr.GetValue(1);//column 1 from the result contains the column names
            if (columnName.Equals(value))
            {
                dr.Close();
                return true;
            }
        }

        dr.Close();
        return false;
    }