从数据库列和 C# 中的 textBox 值中扣除值,扣除后的值必须存储在新列中

Posted

技术标签:

【中文标题】从数据库列和 C# 中的 textBox 值中扣除值,扣除后的值必须存储在新列中【英文标题】:Deduct value from database column and from textBox value in C# and after the deduction the value must be stored in new column 【发布时间】:2020-03-30 03:31:37 【问题描述】:

我需要帮助从 C# 中的数据库列和 textBox 值中扣除值,扣除后的值必须存储在新列中。

包含值的列名是-“txttopup”

并且更新后的值必须存储在列名-“txtbalance”中

我使用 SQL Server 2014,附上代码和数据库快照

代码是

private void button17_Click(object sender, EventArgs e)

    String ConString = "Data Source = DESKTOP - JENA\\SQLEXPRESS; Initial Catalog = Project_Smartcard; Integrated Security = True";

    SqlConnection cnn = new SqlConnection(ConString);

    // SqlCommand command;
    // SqlDataReader rd;

    String sql = "Select * from WriteCard";

    try
    
        // cnn.Open();
        // MessageBox.Show("Connection is active!");
        // sc = new SqlCommand(sql, cnn);
        // rd = sc.ExecuteReader();

        // while (rd.Read())
        // 
        //    // Retrieved.Text = rd.row[6]["amount"].Tostring();
        // 

        // sc.Dispose();
        // cnn.Close();

        cnn.Open();

        SqlCommand command = new SqlCommand();
        command.Connection = cnn;
        command.CommandText = "update class set txtbalance = txttopup - " + Convert.ToInt32(totalpayment.Text);

        command.ExecuteNonQuery();

        cnn.Close();
      

【问题讨论】:

我们确实更喜欢将数据添加为格式化文本,而不是图像,因为您会发现很难看到图像,而且我们无法将它们复制并粘贴出来进行测试。 您不需要从该图像中复制数据,这是我的数据库的快照以及为什么我附加了您必须查看列名“txttopup”和“txtbalance” 这段代码遇到了什么问题( 存在一些问题,但最令人担忧的是您的 sql 中缺少 where 子句;您可能需要根据您正在处理的txtcardno 添加一个。如果此列不是唯一的标识列,我会添加一个。 @DaleK 好的,这是我第一次使用***,我将只使用文本而不是图像 【参考方案1】:

您在此处编写的代码试图更新所有行,因为您没有指定任何条件(即您可能需要 where 子句)。您也可以考虑使用命令参数而不是使用字符串连接。

private void button17_Click(object sender, EventArgs e)

    String ConString = "Data Source = DESKTOP - JENA\\SQLEXPRESS; Initial Catalog = Project_Smartcard; Integrated Security = True";

    SqlConnection cnn = new SqlConnection(ConString);
    String sql = "Select * from WriteCard";

    try
    
        cnn.Open();

        SqlCommand command = new SqlCommand();
        command.Connection = cnn;
        command.CommandText = "update class set txtbalance = txttopup - @txtPopup WHERE bdcardno= @barcode";
        command.Parameters.AddWithValue("@txtPopup", Convert.ToInt32(txtPopup.Text));
        // Somehow you will want to gather the barcode number, either through query or another textbox.
        command.Parameters.AddWithValue("@barcode", Convert.ToInt32(txtBarcode.Text));
        command.ExecuteNonQuery();
        cnn.Close();
      

【讨论】:

谢谢,但我不知道如何编码,你能编辑我上面发布的代码并附在此处 @MichaeID,感谢您提供版本代码,但仍然出现类似的错误之一 @JenaJacksparrow,问题可能出在您的连接字符串上。使用 MS Sql Management Studio、Visual Studio 或各种其他工具,您可以使用 GUI 界面连接到数据库,并可能获得连接到实例所需的精确连接字符串。这是与原始问题不同的问题,因此如果您在连接到数据库时遇到问题,您应该创建一个新问题。【参考方案2】:

您需要使用 SqlCommand 参数来避免 SQL 注入攻击。还应用过滤器以避免更新所有行。

cnn.Open();
SqlCommand command = new SqlCommand();
command.Connection = cnn;
command.CommandText = "update class set txtbalance = txttopup - @txtPopup" +
                      " WHERE bdcardno = @bdcardno";
command.Parameters.Add("@txtPopup", SqlDbType.Int);
command.Parameters["@txtPopup"].Value = Convert.ToInt32(txtPopup.Text);
//Arrive at the bdcardno using business logic or get it from user
command.Parameters.Add("@bdcardno", SqlDbType.Int);
command.Parameters["@bdcardno"].Value = Convert.ToInt32(txtbdCardNo.Text);
command.ExecuteNonQuery();

【讨论】:

感谢您的编码,我尝试了您的代码,但是我收到如下 SQL 错误消息:建立与 SQL Server 的连接时发生网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 (提供程序。SQL 网络接口,错误 26 - 错误定位服务器/指定的实例) 尝试将服务器名称包含在[]中并尝试连接。 我尝试了很多方法,仍然出现错误消息,我可以通过 Skype 或 WhatsApp 与您联系这是我的 WhatsApp - 0094778485102 不要在公共论坛上分享您的个人信息。将错误放在问题中,并会尽力提供帮助。否则,我们可以在 *** 中进行聊天。 我是 *** 的新用户,我没有创建聊天室的经验和声誉必须 100,你能帮我创建聊天室并解决我的问题吗?

以上是关于从数据库列和 C# 中的 textBox 值中扣除值,扣除后的值必须存储在新列中的主要内容,如果未能解决你的问题,请参考以下文章

使扣除结果包含2位小数

Asp.net C# 使用 Javascript 将数据从 gridview 显示到 TextBox

C#中,对用TextBox读取数据的时候要求读取的数据能自动换行的代码怎样写?TextBOX命令为txtContent

如何从c#中的dob计算年龄[重复]

访问 GridView 中的 TextBox 文本 (C# / XAML)

C# 遍历datatable 比较textbox中的值,,是不是重复