两台计算机,相同的代码,两个结果(插入和更新)



我制作了程序,在我的计算机上构建发布,它工作得很好,但是当我在客户端计算机上安装它时,我得到了一些错误。对我来说最大的谜是这段代码:

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中运行失败的版本,看看它是如何失败的。

最新更新