我正在尝试检查SQL Server表中是否存在行。
如果该行存在(在特定的TicketID
上),它应该显示一个消息框,由于数据库中已存在条目,因此无法继续。但如果没有,则应插入一些记录(特定于TicketID
)。
我试过尝试捕捉但是无法做到:
以下是查询代码:(例如,硬编码ticketID
)
bool no;
try
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ST"].ConnectionString.ToString());
con.Open();
cmd.CommandText = "SELECT EngineerVisited from tblTicketTechnical where TicketID=1";
cmd.Connection = con;
rdr = cmd.ExecuteReader();
while (rdr.Read())
{
bool = rdr.GetBoolean(0);
}
con.Close();
}
catch
{
MessageBox.Show("Cannot continue");
}
我真的很感激,如果有人可以建议一个函数,如果找到了行则返回true,如果不是则返回false。
答案 0 :(得分:3)
您应该在代码中遵循与您用英语说明的逻辑相同的逻辑:如果已经有票证显示消息,如果没有,请插入一些数据。
var checkQuery = "SELECT COUNT(*) FROM tblTicketTechnical where TicketID=1";
var command = new OleDbCommand(checkQuery, con);
con.Open();
int count = (int)command.ExecuteScalar();
if(count > 0)
{
//Already exists, show message
}
else
{
var insertQuery = "INSERT INTO tblTicketTechnical(col1, col2) VALUES('val1', val2')";
con = new OleDbCommand(insertQuery, con);
con.ExecuteNonQuery();
}
请注意,这是写在我脑海中而未经过测试。我也没有实现异常处理。这只是为了向您展示如何执行您想要实现的目标的逻辑。
答案 1 :(得分:2)
您可以使用SQLDataReader
的{{3}}属性。
答案 2 :(得分:1)
只有在您的代码抛出catch
时才会执行exception
块。这里根本没有发生。
而不是Try / Catch使用if
语句并检查您的查询结果。
答案 3 :(得分:1)
像这样创建程序和代码
IF NOT EXISTS (SELECT 1 FROM youtable WHERE id= @id)
BEGIN
RAISERROR ('Record Exists', 16, 2)
END
ELSE
Begin
INSERT INTO YOURTABEL(COLUM1,COLUM2) VALUES(VALUE1, VALUE2)
END
然后通过try catch您可以向用户显示消息
答案 4 :(得分:0)
您可以使用DataTableReader.HasRows Property
The HasRows property returns information about the current result set