gpt4 book ai didi

c# - 在 ASP.Net 中添加具有相同主键数据的数据

转载 作者:太空宇宙 更新时间:2023-11-03 17:22:25 25 4
gpt4 key购买 nike

我有一个名为 AVUKAT 的表及其列(AVUKATHESAP(Primary KEY)、MUSTERI)

所有MUSTERI都有一个唯一的HESAP (int)。

很简单,我有一个这样的页面。

enter image description here

第一个下拉菜单选择 MUSTERI,第二个是 AVUKAT

我用这段代码自动计算 HESAP(intPrimary KEY)。 (在背景上。)

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
string strConnectionString = ConfigurationManager.ConnectionStrings["SqlServerCstr"].ConnectionString;

SqlConnection myConnection = new SqlConnection(strConnectionString);
myConnection.Open();
string hesapNo = DropDownList1.SelectedItem.Value;

string query = "select A.HESAP_NO from YAZ..MARDATA.S_TEKLIF A where A.MUS_K_ISIM = '" + hesapNo + "'";

SqlCommand cmd = new SqlCommand(query, myConnection);


if (DropDownList1.SelectedValue != "0" && DropDownList2.SelectedValue != "0")
{
Add.Enabled = true;
Label1.Text = cmd.ExecuteScalar().ToString();
}
else
{
Add.Enabled = false;

}
Label1.Visible = false;
myConnection.Close();
}

我只是用这段代码计算HESAP

我的ADD按钮点击功能是;

protected void Add_Click(object sender, EventArgs e)
{


try
{
string strConnectionString = ConfigurationManager.ConnectionStrings["SqlServerCstr"].ConnectionString;

SqlConnection myConnection = new SqlConnection(strConnectionString);
myConnection.Open();


string hesap = Label1.Text;
string musteriadi = DropDownList1.SelectedItem.Value;
string avukat = DropDownList2.SelectedItem.Value;

SqlCommand cmd = new SqlCommand("INSERT INTO AVUKAT VALUES (@MUSTERI, @AVUKAT, @HESAP)", myConnection);

cmd.Parameters.AddWithValue("@HESAP", hesap);
cmd.Parameters.AddWithValue("@MUSTERI", musteriadi);
cmd.Parameters.AddWithValue("@AVUKAT", avukat);
cmd.Connection = myConnection;



SqlDataReader dr = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
Response.Redirect(Request.Url.ToString());
myConnection.Close();
}
catch (Exception)
{
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), " ", "alert('Bu Müşteri Zaten Mevcut!')", true);

}
}

使用 try catch 的原因,如果有人试图为我想要的 MUSTERI 添加具有相同 HESAP (int) 值的添加,则会显示错误消息并且不添加表格。

但是当我尝试添加相同的 MUSTERI(也是相同的 HESAP)时,添加具有 HESAP=0 值的相同 MUSTERI。

enter image description here

我怎样才能避免这种情况?我选择 HESAP 列是 Primary KEY,但仍然添加相同的 MUSTERI。

最佳答案

这里没有什么太明显的东西可以解释您所看到的行为。最可能的问题实际上是 Label1.Text 的值在执行插入之前为 0,可能是在 ASP.NET 页面生命周期中的其他位置设置的。要确保在hesap 初始化后添加一行代码在Add_Click 中,例如...

Response.Write("<strong>hesap == " + hesap + "</strong>");

...并注释掉 Response.Redirect 以便您可以看到输出。

您还可以对代码进行一些改进,以降低出现问题的可能性。

清理输入以避免 SQL 注入(inject)非常重要。希望您已经在代码片段中未显示的其他地方执行此操作。如果你不知道这是什么,那就是 heaps of questions about it在这里。

此外,您不是为了检索任何行而进行查询,因此使用ExecuteNonQuery。所以我也要替换这一行...

SqlDataReader dr = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);

...与...

int numberOfRows = cmd.ExecuteNonQuery();

然后检查 ExecuteNonQuery 的值以确保 numberOfRows == 1 这样您就知道实际发生了什么。

您还应该使用 using 语句 包装您的 SqlConnectionSqlCommand 初始化程序。这意味着即使出现问题,它们也会自动被处理掉。这将防止内存问题和连接保持打开状态的问题。

最后,通过将该行更改为 catch (Exception ex)让异常值通过进入 catch 语句。使用 ex.ToString() 输出异常以查看其所有详细信息。现在您不知道如果发生异常可能出了什么问题。

关于c# - 在 ASP.Net 中添加具有相同主键数据的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5116064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com