【问题标题】:SQL Server insertSQL Server 插入
【发布时间】:2010-08-30 23:01:44
【问题描述】:

我有一个简单的两字段表单,将其数据存储在数据库中。由于某种原因,它不起作用。我已验证连接字符串有效,因为它在我制作的另一个项目中使用。

我没有包括第一个类的开始或其页面加载。

代码:

    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        string Name = txtName.Text;
        string Description = txtSpecial.Text;
        string method = string.Format(
            "INSERT INTO RbSpecials (Name,Description,Active) VALUES ('{0}','{1}','1')",
            Name,
            Description);
        RbConfiguration mySql = new RbConfiguration();
        try
        {
            mySql.Sql_Connection(method);
        }
        catch
        {

        }
    }
}

public class RbConfiguration
{
    string DbConnectionString = "System.Configuration.ConfigurationManager.ConnectionStrings['RBConnectionString'].ConnectionString";

    public void Sql_Connection(string queryString)
    {
        SqlConnection conn = new SqlConnection(DbConnectionString);
        SqlCommand cmd = new SqlCommand(queryString, conn);
        conn.Open();

        conn.Close();
    }
}

【问题讨论】:

  • 异常出现在哪里,是什么?
  • 它实际上并没有产生错误,当我去查看表格时没有插入值。来了解一下,连接字符串是用引号括起来的,我没有使用ExecuteNonQuery()
  • 没有回答你的问题,但是你的代码容易受到SQL injection的攻击,这是非常危险的。谷歌一下,开始使用参数化查询。
  • 感谢您的建议,我会调查一下。

标签: c# asp.net .net sql sql-server


【解决方案1】:

你永远不会execute你的 SQL 命令:

conn.Open(); 
cmd.ExecuteNonQuery(); 
conn.Close(); 

而且你的连接字符串是错误的(去掉双引号):

string DbConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["RBConnectionString"].ConnectionString;

【讨论】:

  • 谢谢,在修复连接字符串并执行非查询后,它可以完美运行!
【解决方案2】:

好吧,在不知道错误的情况下,无论如何我都会试一试。

string DbConnectionString = "System.Configuration.ConfigurationManager.ConnectionStrings['RBConnectionString'].ConnectionString";

应该是

string DbConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["RBConnectionString"].ConnectionString;

正如亚当所说,你从来没有真正执行过你的查询。 Sql_Connection 方法,只打开一个连接,然后再次关闭它,实际上没有做任何事情。

试试这个:

public void Sql_Connection(string queryString)
{
    using( SqlConnection conn = new SqlConnection(DbConnectionString) )
    {
        SqlCommand cmd = new SqlCommand(queryString, conn);
        conn.Open();
        cmd.ExecuteNonQuery();
    }
}

【讨论】:

  • 啊,是的,你是对的。我还注意到括号中的名称需要在“”而不是''中。
  • @Nick,啊,是的,我匆忙中没有注意到 :)
【解决方案3】:
  1. 检查你的连接字符串代码不能是它的类从web.config获取连接字符串的字符串,所以它应该是这样的

    字符串 DbConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["RBConnectionString"].ConnectionString;

  2. 你没有执行你的 SQlCommand,所以它会插入数据,这样做

    conn.Open();

    cmd.ExecuteNonQuery();

    conn.Close();

  3. 不要让您的代码易受 SQLINjection 攻击,这不是原因,而是最佳实践,试试这篇文章

How To: Protect From SQL Injection in ASP.NET

【讨论】:

    猜你喜欢
    • 2017-09-08
    • 1970-01-01
    • 2010-10-31
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 2014-10-26
    • 2014-10-05
    相关资源
    最近更新 更多