我现在正在学习更多关于C#和SQL连接的知识,并且正在做一个挑战,我正在做一个简单的atm。
这个自动取款机将处理创建帐户,检查它是否存在于数据库中,如果不存在,然后添加到数据库中,如果存在,然后关闭程序。它也将处理自动取款机的其余部分,一旦你登录到你的卡。与取出和输入。
这个挑战只是为了让我学习更多的SQL和C#。
我的问题:我试图检查值是否已经存在于我的SQL表中,但我不确定我做错了什么。
先谢了!
bool checkifExist(int number) {
bool itExist;
string queryString;
var cnn = new SqlConnection(connectionString);
DataTable dt = new DataTable();
try
{
cnn.Open();
queryString = "select Count(*) from dbo.User_Card_Information where [CardNumbers] = @cardnumbers";
SqlCommand check_cardnumber = new SqlCommand(queryString, cnn);
check_cardnumber.Parameters.AddWithValue("@cardnumbers", cardnumber);
int cardExist = (int)check_cardnumber.ExecuteScalar();
if(check_cardnumber.ExecuteNonQuery() != cardnumber)
{
Console.WriteLine("Create completed!");
cnn.Close();
return itExist = false;
}
else
{
Console.WriteLine("This Card Number already exist!");
itExist = true;
cnn.Close();
return itExist;
}
}
catch (System.Data.SqlClient.SqlException ex)
{
string msg = "Fetch Error:";
msg += ex.Message;
throw new Exception(msg);
}
finally
{
cnn.Close();
}
}
4条答案
按热度按时间nhaq1z211#
如果要避免数据库中出现重复,可以在列上设置约束。约束
UNIQUE
确保该列的值只存在一次。关于constraints的更多信息
在您的代码中,两次执行相同的查询是没有意义的:
此外,您使用的
SqlCommand.ExecuteNonQuery()
返回受影响的行,这不是您想要的。您应该将
(int)check_cardnumber.ExecuteScalar()
的结果与给定的card_number
进行比较。sqxo8psd2#
如果目的是检查数据是否存在于表中,则可以只查询顶行而不是所有行,在这种情况下,不会出现多行或重复行的异常。
w8rqjzmb3#
嗨我想你需要这样的东西
irlmq6kh4#