在SQL中获取列信息

本文关键字:信息 获取 SQL | 更新日期: 2023-09-27 18:15:42

我对SQL有点陌生,所以我不确定我是否以正确的方式进行。我试图从我的SQL Server数据库中获取数据,我想找出checkedin是否为1/0,但它需要在特定用户上搜索并在最新日期之后排序。

我想做的是这样的:

string connectionString = ".....";
SqlConnection cnn = new SqlConnection(connectionString);
SqlCommand checkForInOrOut = new SqlCommand("SELECT CHECKEDIN from timereg ORDER BY TIME DESC LIMIT 1 WHERE UNILOGIN = '" + publiclasses.unilogin + "'", cnn);

我的问题是,我这样做对吗?我如何获取收集到的数据,如果一切处理正确,它应该返回1或0。我应该使用某种SqlDataReader吗?我在c#/WPF

中这样做

谢谢

在SQL中获取列信息

using (SqlDataReader myReader = checkForInOrOut.ExecuteReader())
{
   while (myReader.Read())
   {
      string value = myReader["COLUMN NAME"].ToString();
   }
}

这是你如何从SQL读取数据,但我建议你看看Parameters.AddWithValue

您的查询有一些错误。首先WHERE在ORDER BY和LIMIT之前是一个MySql关键字,当你使用Sql Server类的时候。所以你应该使用TOP value

int checkedIn = 0;
string cmdText = @"SELECT TOP 1 CHECKEDIN from timereg 
                   WHERE UNILOGIN = @unilogin
                   ORDER BY TIME DESC";
string connectionString = ".....";
using(SqlConnection cnn = new SqlConnection(connectionString))
using(SqlCommand checkForInOrOut = new SqlCommand(cmdText, cnn))
{
    cnn.Open();
    checkForInOrOut.Parameters.Add("@unilogin", SqlDbType.NVarChar).Value = publiclasses.unilogin;
    // You return just one row and one column, 
    // so the best method to use is ExecuteScalar
    object result = checkForInOrOut.ExecuteScalar();
    // ExecuteScalar returns null if there is no match for your where condition
    if(result != null)
    {
       MessageBox.Show("Login OK");
       // Now convert the result variable to the exact datatype 
       // expected for checkedin, here I suppose you want an integer
       checkedIN = Convert.ToInt32(result);
       .....
    }
    else
       MessageBox.Show("Login Failed");
}

请注意我是如何用正确使用参数来替换字符串连接的,以避免解析问题和sql注入攻击。最后,每个一次性对象(特别是连接)都应该放在using块中