为什么SQL查询只工作时从VS而不是外部运行

本文关键字:外部 运行 VS 查询 SQL 工作 为什么 | 更新日期: 2023-09-27 18:10:01

我有一个搜索文本框和一个提交按钮,用户可以在其中输入名称并点击按钮以获得结果。我遇到的唯一问题是当我从VS运行网站时,查询返回结果,但当我将网站放入web服务时并使用localhost链接之外的链接访问它,它不起作用(显示Failed: Not not found in Database)。

我的localhost链接与搜索查询:http://localhost:53647/PDFFormsNew/searchcreate.aspx(通过VS运行)

我在VS之外访问的IIS链接不适合搜索查询:http://devserver-svr-dev:85/searchcreate.aspx

知道它为什么会导致它以及如何修复它吗?

我包含了执行查询的代码片段:

string cString = "Data Source=svr-db;Initial Catalog=test-db;User Id=myusr;Password=p@$$w0rd;";
protected void btnValidateName_Click(object sender, EventArgs e)
{
    this.sqlQuery();
}
public void sqlQuery()
{
    tc.Text = "HERE";
    Conn = new SqlConnection(cString);
    Conn.Open();
    //nameE = '%'+txtName.Text+'%';
    nameE = '%' + RemoveSpecialCharacters(txtName.Text) + '%';
    sqlCode = "SELECT * FROM [test-db].[dbo].[TablePDFTest] WHERE [name] LIKE @name"; //allow user to enter partial
    using (SqlCommand command = new SqlCommand(sqlCode, Conn))
    {
        //command.CommandType = CommandType.Text;
        command.Parameters.AddWithValue("name", nameE);
        using (reader = command.ExecuteReader())
        {
            if (reader.HasRows)
            {
                rptContent.DataSource = reader;
                rptContent.DataBind();
                lblIsValid.Text = "Success: Name found in Database";
                lblIsValid.ForeColor = System.Drawing.ColorTranslator.FromHtml("#009900");
                //btnGeneratePDF.Visible = true;
            }
            if (!reader.HasRows)
            {
                rptContent.DataSource = null;
                rptContent.DataSourceID = null;
                rptContent.DataBind();
                lblIsValid.Text = "Failed: Name not found in Database";
                lblIsValid.ForeColor = System.Drawing.ColorTranslator.FromHtml("#990000");
                //btnGeneratePDF.Visible = false;
            }
        }
    }
    Conn.Close();
}
public static string RemoveSpecialCharacters(string str)
{
    StringBuilder sb = new StringBuilder();
    foreach (char c in str)
    {
        if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '.')
        {
            sb.Append(c);
        }
    }
    return sb.ToString();
}

为什么SQL查询只工作时从VS而不是外部运行

问题是您传递了无效的字符串作为参数。

语句是"SELECT * FROM [test-db].[dbo].[TablePDFTest] WHERE [name] LIKE @name",你传递

command.Parameters.AddWithValue("name", nameE);

but should

command.Parameters.AddWithValue("@name", nameE);

p。

你不应该在SQL查询中使用*,你应该只询问你真正要使用的字段。同样,您不使用任何应该使用count(*)的数据。使用count,您应该能够获得一些性能。