如何将我的客户数据添加到 SQL 数据库中?

Posted

技术标签:

【中文标题】如何将我的客户数据添加到 SQL 数据库中?【英文标题】:How do i add my customer data into a SQL database? 【发布时间】:2021-04-29 08:12:16 【问题描述】:

这是我的 CustomerRegister 类,但我似乎无法将 addressTextBox 中的数据输入到 CustomerTbl。

DataBase dbObj = new DataBase();

string selStr = "Update CustomerTbl Set customer_address = '" + addressTextBox.Text + "' Where custID = " + "NULL";
 int i = dbObj.ExecuteNonQuery(selStr);

这是我的数据库类,但return comdObj.ExecuteNonQuery(); 不起作用,因为没有名为 NULL 的此类 custID。那么我该如何编程,以便在新用户注册时能够不断更新数据库?

class DataBase
    
        string connStr = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=D:\OOPG\Banking Mini Project Raynard\Banking Mini Project Raynard\Database1.mdf;Integrated Security = True";
        SqlConnection connObj;
        SqlCommand comdObj;
        SqlDataReader dR;

        public DataBase()
        
            connObj = new SqlConnection(connStr);
            connObj.Open();
        
        public SqlDataReader ExecuteReader(string selStr)
        
            comdObj = new SqlCommand(selStr, connObj);
            dR = comdObj.ExecuteReader();
            return dR;
        
        public int ExecuteNonQuery(string sqlStr)
        
            comdObj = new SqlCommand(sqlStr, connObj);
            return comdObj.ExecuteNonQuery();
        
    

【问题讨论】:

重要:您的 SQL 方法对于 SQL 注入来说是成熟的。您应该从不连接用户输入来创建 SQL(这对于 i18n/l10n 和其他原因也很不利)。总是总是总是:使用参数。这真的很很重要(否则有人可能会轻易破坏或泄露您的数据;老实说,这是破解应用程序的最简单方法) 在明显的 sql 注入弱点之外:实际上您不应该尝试重用连接、命令和其他 ado.net 实例。创建、使用、处置通常被认为是最佳实践。 查看How can I add user-supplied input to an SQL statement? 了解如何使用sql参数。请参阅Exploits of a Mom 以获取一个有趣的卡通片来说明 sql 注入如何损害您的应用程序数据。 见C# Data Connections Best Practice? 另见what's the issue with AttachDbFilename 【参考方案1】:

首先,您应该在执行任何查询之前创建到 SQL 数据库的连接。之后,您应该能够在将任何数据更新到数据库之前插入数据。成功插入数据后,您可以使用上述命令文本更新数据。这是一些插入数据以注册客户的示例代码。

using (SqlCommand command = new SqlCommand())

    command.Connection = connection;            // <== lacking
    command.CommandType = CommandType.Text;
    command.CommandText = "INSERT into CustomerTbl (CustId, Name, Address) VALUES (@CustId, @Name, @Address)";
    command.Parameters.AddWithValue("@CustId", name);
    command.Parameters.AddWithValue("@Name", userId);
    command.Parameters.AddWithValue("@Address", idDepart);

    try
    
        connection.Open();
        int recordsAffected = command.ExecuteNonQuery();
    
    catch(SqlException)
    
        // error here
    
    finally
    
        connection.Close();
    

【讨论】:

小观察:因为我们看不到这个连接的生命周期,所以像这样使用Open()/Close() 可能是不合适的(如果我们是创建 连接,然后是的:需要调用Open()【参考方案2】:

如果您要添加记录,则需要INSERT,而不是UPDATE。例如(这里使用"Dapper" 完成所有繁重的工作,包括参数处理):

using Dapper;
//...
void UpsertAddress(int? id, string address)

    if (id is null)
    
        connection.Execute("insert CustomerTbl (customer_address) values (@address);",
            new  address ); // possibly using the OUTPUT clause to fetch an IDENTITY
    
    else
    
        connection.Execute(
            "update CustomerTbl set customer_address = @address where custID = @id;",
            new  id, address );
    

【讨论】:

以上是关于如何将我的客户数据添加到 SQL 数据库中?的主要内容,如果未能解决你的问题,请参考以下文章

Android 房间数据库。如何将我的模型类添加到房间数据库中

如何将我的 excel gridview 添加到我的 aspxgridview 并保存在 sql server 中?

如何将 WHERE 子句添加到 Power BI 中的 SQL 或 Access 数据源?

SQL 统计关系数据

无法使用 tkinter 将我的数据添加到 mysql

如何将我的 App.vue 页面添加到 Vuex 商店?