c# - WHERE columnName = C# 中 MySQL 查询中的数据的问题

标签 c# mysql

我在 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/

相关文章:

c# - debuggerdisplay 未按预期显示字段值

java - 没有代码生成的 Jooq insert 语句

PHP和Mysql,关于价格字段中字段出现2次$、美元符号时删除记录

c# - 代码 "1\u02ff".IndexOf ("1") 返回 -1

c# - 在 C# 中控制和管理复杂的程序流

C# mysql参数,点列错误

php - 如何选择用户在 SQL 和 PHP 中关注的具有特定主题标签的所有帖子?

mysql - 将 2 个查询合并为一个查询

mysql - 创建与 CSV 同名的表

c# - 如何确定使用 .net 的 Windows 机器上是 ACE 还是 JET?