C#链接到访问数据库,使用字符串而不是整数查找行,并显示在消息框

时间:2017-10-02 11:37:00

标签: c# ms-access

我使用OleDbAdapter将我的Access数据库链接到C#,并且无法弄清楚如何通过字符串字段而不是数字字段在数据库中查找特定行。我正在为游戏服务器管理器制作一个简单的前端UI,以找出人们被禁止或信任他的服务器的原因,并且需要确保他可以通过他们的游戏名称找到玩家,而不是微软设置的任意ID。谢谢:))

string socialClub1 = socialText.Text;
String connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data" + @" Source=D:\carMeetData.accdb";
String tableName = "Banned";
String query = String.Format("select * from [{0}]", tableName);

DataSet ds = new DataSet();
OleDbConnection conn = new OleDbConnection(connectionString);
try
{
    //Open Database Connection
    conn.Open();
    OleDbDataAdapter da = new OleDbDataAdapter(query, conn);
    OleDbCommandBuilder cmdB = new OleDbCommandBuilder(da);
    da.MissingSchemaAction = MissingSchemaAction.AddWithKey;
    //Fill the DataSet
    da.Fill(ds, tableName);
    //Close the Database Connection
    conn.Close();
    MessageBox.Show("Steam: " + ds.Tables["Banned"].Rows[0]["Steam"] + " Social Club: " + ds.Tables["Banned"].Rows[0]["Social Club"]);
}

catch (OleDbException exp)
{
    MessageBox.Show("Database Error:" + exp.Message.ToString());
}

finally
{
    if (conn.State == ConnectionState.Open)
    {
        conn.Close();
    }

}

1 个答案:

答案 0 :(得分:0)

假设string socialClub1 = socialText.Text;是您要搜索的值,那么您的SQL查询需要为SELECT * FROM Banned where [Social Club] = socialClub1

你不应该使用字符串连接或String.Format,因为它很容易被SQL注入。

OLEDB参数应使用?值而不是sql server样式@前缀,并且对它们的声明顺序很敏感。

这样的事情应该有效:

var query = "SELECT * FROM Banned where [Social Club] = ?";
var command = new OleDbCommand(query, conn);
command.Parameters.Add(new OleDbParameter("SocialClub", socialText.Text));