在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
谢谢
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块中