我在 Windows 服务器上有一个 C# web 服务,我正在使用 PHP 在 linux 服务器上与之交互。 PHP 从数据库中获取信息,然后页面提供一个“更多信息”按钮,然后调用 Web 服务并将记录的名称字段作为参数传递。所以我在查询中使用了 WHERE 语句,所以我只为该记录提取额外的字段。我收到错误:
System.Data.SqlClient.SqlException:Invalid column name '42'
其中 42 是数据库名称字段的值。
我的问题是
string selectStr = "SELECT name, castNotes, triviaNotes FROM tableName WHERE name =\"" + show + "\"";
我不知道是我的查询有问题还是数据库有问题,但这里是我的其余代码以供引用。
注意:当我抓取所有记录时,这一切都完美无缺,但我只想抓取我向网络服务请求的记录。
public class ktvService : System.Web.Services.WebService {
[WebMethod]
public string moreInfo(string show) {
string connectionStr = "MyConnectionString";
string selectStr = "SELECT name, castNotes, triviaNotes FROM tableName WHERE name =\"" + show + "\"";
SqlConnection conn = new SqlConnection(connectionStr);
SqlDataAdapter da = new SqlDataAdapter(selectStr, conn);
DataSet ds = new DataSet();
da.Fill(ds, "tableName");
DataTable dt = ds.Tables["tableName"];
DataRow theShow = dt.Rows[0];
string response = "Name: " + theShow["name"].ToString() + "Cast: " + theShow["castNotes"].ToString() + " Trivia: " + theShow["triviaNotes"].ToString();
return response;
}
最佳答案
快速解决方案:
我相信您需要在 selectStr
中使用单引号:
string selectStr =
"SELECT name, castNotes, triviaNotes FROM tableName WHERE name = '" + show + "'";
更多信息:
在 .NET 中,您需要确保在不再需要任何连接时明确关闭它们。最简单的方法是将 using
语句包裹在实现 IDisposable
的任何类型周围,例如本例中的 SqlConnection
:
using(SqlConnection conn = new SqlConnection(connectionStr))
{
SqlDataAdapter da = new SqlDataAdapter(selectStr, conn);
DataSet ds = new DataSet();
da.Fill(ds, "tableName");
DataTable dt = ds.Tables["tableName"];
DataRow theShow = dt.Rows[0];
string response = "Name: " + theShow["name"].ToString() + "Cast: " + theShow["castNotes"].ToString() + " Trivia: " + theShow["triviaNotes"].ToString();
return response;
}
此外,看起来您的代码很容易受到 SQL 注入(inject)攻击。如果有人提交的表单的值为:fake name' OR 1=1;DROP DATABASE someDbName;--
会怎样?
您需要利用 SQL 参数,例如:
SqlCommand cmd = new SqlCommand(
"SELECT name, castNotes, triviaNotes FROM tableName WHERE name = @show", conn);
cmd.Parameters.AddWithValue("@show", show);
关于c# - WHERE columnName = C# 中 MySQL 查询中的数据的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2762426/