我正在尝试使用文本框获取文件目标路径并将其传递到数据库中。(在Visual Studio中开发)当查询运行时,会显示错误....
updateClark
类中的方法user
如下所示
public void updateClark(string _cid, string _path)
{
SqlCommand cmd = new SqlCommand(@"UPDATE tbl_Path SET folder_path='" + _path + "' WHERE clark_id='" + _cid + "'", ConnectionDB.connection());
cmd.ExecuteNonQuery();
}
我在代码中遗漏了什么?
答案 0 :(得分:5)
既然您已编辑了问题以包含实际相关代码,那么您应该执行以下操作:
public void updateClark(string _cid, string _path)
{
string command = "UPDATE tbl_Path SET folder_path=@folderPath WHERE clark_id=@clarkId";
using (SqlCommand cmd = new SqlCommand(command, ConnectionDB.connection()))
{
cmd.Parameters.AddWithValue("folderPath", _path);
cmd.Parameters.AddWithValue("clarkId", _cid);
cmd.ExecuteNonQuery();
}
}
答案 1 :(得分:3)
如果你使用SQLParameters,单引号将被正确处理,你不必担心SQL注入(有人可以在文本框中输入嵌套的SQL命令,他们会盲目地传回服务器)。
以下代码假定ConnectionDB.connection()
方法打开与数据库的新连接。您应该考虑将您的一次性对象(如连接和命令)放在using
块中,以便它们自动关闭和处理。
public static void updateClark(string cid, string path)
{
var cmdStr = "UPDATE tbl_Path SET folder_path=@path WHERE clark_id=@cid";
using (var con = ConnectionDB.connection())
{
con.Open();
using (var cmd = new SqlCommand(cmdStr, con))
{
cmd.Parameters.AddWithValue(new SqlParameter("@path", path));
cmd.Parameters.AddWithValue(new SqlParameter("@cid", cid));
cmd.ExecuteNonQuery();
}
}
}
答案 2 :(得分:1)
这是您应该安全地访问数据库而无需处理数据的方式。
private static void SqlCommandPrepareEx(string connectionString)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = new SqlCommand(null, connection);
// Create and prepare an SQL statement.
command.CommandText =
"INSERT INTO Region (RegionID, RegionDescription) " +
"VALUES (@id, @desc)";
SqlParameter idParam = new SqlParameter("@id", SqlDbType.Int, 0);
SqlParameter descParam =
new SqlParameter("@desc", SqlDbType.Text, 100);
idParam.Value = 20;
descParam.Value = "First Region";
command.Parameters.Add(idParam);
command.Parameters.Add(descParam);
// Call Prepare after setting the Commandtext and Parameters.
command.Prepare();
command.ExecuteNonQuery();
// Change parameter values and call ExecuteNonQuery.
command.Parameters[0].Value = 21;
command.Parameters[1].Value = "Second Region";
command.ExecuteNonQuery();
}
}
从MSDN
中窃取的代码段答案 3 :(得分:1)
上面有很多好的答案,以防你寻找替代方案。
public void updateClark(string _cid, string _path)
{
string sql = String.Format("UPDATE tbl_Path SET folder_path={0} WHERE clark_id={1}",path,cId);
SqlCommand cmd = new SqlCommand(sql, ConnectionDB.connection());
cmd.ExecuteNonQuery();
}
答案 4 :(得分:-2)
您需要用两个引号替换单引号。在上面的示例中,它似乎是变量txtPath
。值"F:\Softwares\IDE's"
需要以"F:\Softwares\IDE''s"
传递。