从数据库列和 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 值中扣除值,扣除后的值必须存储在新列中的主要内容,如果未能解决你的问题,请参考以下文章
Asp.net C# 使用 Javascript 将数据从 gridview 显示到 TextBox
C#中,对用TextBox读取数据的时候要求读取的数据能自动换行的代码怎样写?TextBOX命令为txtContent