两台计算机,相同的代码,两个结果(插入和更新)
本文关键字:结果 两个 更新 插入 两台 计算机 代码 | 更新日期: 2023-09-27 18:12:01
我制作了程序,在我的计算机上构建发布,它工作得很好,但是当我在客户端计算机上安装它时,我得到了一些错误。对我来说最大的谜是这段代码:
if (!string.IsNullOrEmpty(textBox2.Text) && !string.IsNullOrEmpty(textBox6.Text))
{
string komanda = "";
con.Open();
SqlDataAdapter sda = new SqlDataAdapter();
SqlCommand cmd = new SqlCommand();
string naziv = Convert.ToString(textBox2.Text);
string obim = Convert.ToString(textBox3.Text);
string format = Convert.ToString(textBox4.Text);
string isbn = Convert.ToString(textBox5.Text);
decimal cena = Convert.ToDecimal(textBox6.Text);
if (Izbor.Equals(1))
{
komanda = "INSERT INTO Izdanja (Naziv, Obim, Format, ISBN, Cena) VALUES (N'" + naziv + "','" + obim + "','" + format + "','" + isbn + "','" + cena + "')";
}
else if (Izbor.Equals(2))
{
komanda = "UPDATE Izdanja SET Naziv = N'" + naziv + "', Obim ='" + obim + "', Format ='" + format + "', ISBN ='" + isbn + "', Cena ='" + cena + "' WHERE ID='" + textBox1.Text + "'";
}
cmd.CommandText = komanda;
cmd.Connection = con;
cmd.ExecuteNonQuery();
con.Close();
ucitavanjeIzdanja();
Izbor = 0;
}
else
{
MessageBox.Show("Fields must be filled!!!", "Warning!!!");
}
谜是这样的:在我的电脑上一切都工作,在客户端电脑上插入工作,但更新不。错误是:将数据类型varchar转换为数字时出错。这怎么可能呢?如果是错误的连接字符串-插入将不工作,但插入工作,更新不。如果错误是在代码中,它是如何在我的计算机上工作的?相同的代码…
我不知道这是不是问题/正确答案,但是评论太长了。
INSERT
ing和UPDATE
ing时的值是否完全相同?如果不是,则可能与查询类型无关。
例如,如果是cena = 10
,可能一切都很好,但是如果是cena = 10.1m
,那么突然之间当前线程的文化就很重要了。它可能导致客户端pc上出现Cena = '10,1'
。
但是您确实应该使用Soner Gönül提到的参数化查询
1使用参数
这样你就把数据类型正确性的责任扔给了你的代码,而不是纯粹的运气
2区域设置
您的机器和客户端机器上有不同的区域设置。查看1并在将数据发送给SQL之前转换数据。
为了证明这一点,在两台机器上打印SQL字符串到某种日志文件中,并查看在两台机器上运行应用程序时它们的样子。您甚至可以尝试在SSMS中运行失败的版本,看看它是如何失败的。