如何将我的客户数据添加到 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 中?