我试图在c#中创建一个可重用的MySQL数据库类,但我担心保持其安全(可能的商业用途)。 我已经完成了很多阅读,人们建议使用参数将数据添加到表中并获取它等等。我的问题是让类可以通过许多不同的表重复使用 我的插入方法当前(在数据库类中):
public void Insert(string incomingQuery) //Insert Statement
{
//Assign the incomingQuery for use.
string query = incomingQuery;
//Open Database Connection
if(this.OpenConnection() == true)
{
//Create command and assign the query and connection from the constructor
MySqlCommand command = new MySqlCommand(query, connection);
//Execute the command
command.ExecuteNonQuery();
//Close the connection
this.CloseConnection();
}
}
我的Create
方法从另一个类(Users
)传递SQL Query:
public void Create()
{
//Add a new user to the database
string sqlQuery = "INSERT INTO Users(first_name, last_name, pc_username) VALUES('" + firstName + "','" + lastName + "','" + userName + "');";
database.Insert(sqlQuery);
Login();
}
如何让这更安全?
答案 0 :(得分:2)
如何让这更安全?
Use parameters。您当前的查询易受SQL Injection影响。
此外,您的方法中似乎有一个开放连接,最好尽可能晚地打开数据库连接,然后尽早关闭它。对您的连接使用using
语句并在您的方法中打开它,因为Connection和Command实现了IDisposable
接口,它将确保它的处理(关闭连接)。
答案 1 :(得分:1)
在MySQL数据库中使用存储过程,然后使用所需参数调用这些过程。编写实用程序方法,使它们获取键值对词典,并将它们解析为OdbcCommand的Parameters属性
Call a stored procedure with parameter in c#
foreach(KeyValuePar kvp in dictionary)
{
command.Parameters.Add(kvp.Key).Value = kvp.Value;
}
我忘了准确的代码......
答案 2 :(得分:0)
将所有参数(firstName,lastName等)作为字符串[](或更好的字典)传递给类似于以下内容的方法:
AddParamsToCommand(SqlCommand cmd, Dictionary<string,string> paramList)
{
foreach (string s in paramList.Keys)
{
sqlParameter p = cmd.CreateParameter();
p.Name = s;
p.Value = paramList[s];
cmd.Parameters.Add(p);
}
}
仅作为一个例子。
自从我使用OleDB后编辑,忘了将名字放在params for sqlCommands上。