c# - 如何检查数据库中是否存在数据并显示错误
问题描述
我试图出现一个错误,如果用户在同一日期提交数据,他们不应该被允许这样做。我不太确定如何做到这一点,但已经给它一个刺,但没有用。我不确定如何让读者工作。
public string conString = "***ConnectionString***";
private void mileage_submit_btn_Click(object sender, EventArgs e)
{
if (location_comboBox.Text == "" || mileage_textbox.Text == "" || other_location_textBox.Text == "" || other_mileage_textBox.Text == "")
{
MessageBox.Show("Fill all required fields", ("Validation"), MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
SqlConnection con = new SqlConnection(conString);
con.Open();
if (con.State == System.Data.ConnectionState.Open)
{
string query = "INSERT INTO Mileage_Table(eb_number , Date, Location, Mileage, Other_location, Other_Miles, Total_Miles) values(@eb_number, @Date, @Location, @Mileage, @Other_location,@Other_Miles, @Total_Miles)";
SqlCommand cmd = new SqlCommand(query, con);
cmd.Parameters.Add("@eb_number", SqlDbType.Text).Value = Username_Mileage_lbl.Text.ToString();
cmd.Parameters.Add("@Location", SqlDbType.Text).Value = location_comboBox.Text.ToString();
cmd.Parameters.Add("@Mileage", SqlDbType.Decimal).Value = Decimal.Parse(mileage_textbox.Text);
cmd.Parameters.Add("@Other_Location", SqlDbType.Text).Value = other_location_textBox.Text.ToString();
cmd.Parameters.Add("@Other_Miles", SqlDbType.Decimal).Value = Decimal.Parse(other_mileage_textBox.Text);
cmd.Parameters.Add("@Date", SqlDbType.DateTime).Value = DateTime.Parse(Mileage_dateTimePicker.Text).ToString("dd-MM-yyyy");
decimal b = Convert.ToDecimal(mileage_textbox.Text);
decimal c = Convert.ToDecimal(other_mileage_textBox.Text);
cmd.Parameters.Add("@Total_Miles", SqlDbType.Decimal).Value = Convert.ToString(b + c);
using (var reader = cmd.ExecuteReader(System.Data.CommandBehavior.SingleRow))
{
while (reader.Read())
{
if (reader.HasRows == true)
{
MessageBox.Show("Date = " + reader[7].ToString() + "Already Exists");
}
}
}
cmd.ExecuteNonQuery();
decimal TotalMiles = b + c;
MessageBox.Show(TotalMiles + " Miles has been Logged");
con.Close();
解决方案
假设您使用的是 Sql Server,您可以使用以下 SQL 方法来做到这一点
If NOT Exists(select from table where datecolumn = @myDateParam)
Insert Into table (col list) values (@param list);
然后你调用这个 sql 使用
int retVal = cmd.ExecuteNonQuery( .. ); // for plain sql number of affected rows returned. 0 - would mean nothing inserted
MessageBox.Show((retVal > 0 ? "Record Inserted" : "Record with specific date already existed"));
现在,如果您想使用 输出插入的值cmd.ExecuteReader
,您需要添加到您的插入 SqlOUTPUT INSERTED
子句https://docs.microsoft.com/en-us/sql/t-sql/queries/output-clause-transact-sql?视图=sql-server-2017
推荐阅读
- html - 如何保持标题背景图像的纵横比?
- excel - Excel - 放置更改单元格的文本
- javascript - 悬停时模糊整个背景
- ios - 无法安装 Apple Enterprise 应用程序
- r - 使用Shell从VBA内部执行R脚本不起作用
- tabulator - 如何在制表器中向嵌套树数据动态添加行?
- microsoft-cognitive - 使用 Microsoft 自定义翻译(免费层),我们可以构建自定义模型,但我们可以测试模型吗?
- java - Spring Security 不允许通过 https 访问
- sql - 如何让这个结果在列中显示
- python - Matplotlib 3d plot:在 2 个表面上获取单个颜色图