6

テーブルと列がsqliteのコードビハインドで生成されている場合、列名(ヘッダー)を取得することは可能ですか?

これを試しましたが、失敗します:

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();
}
4

2 に答える 2

16

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));
}
于 2013-06-24T21:21:18.530 に答える
6

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;
}
于 2017-07-10T11:10:38.327 に答える