SqlCommand连接本地数据库的字符串

本文关键字:字符串 数据库 连接 SqlCommand | 更新日期: 2023-09-27 18:04:01

我试图在VS Express中创建一个简单的网站,用于Web 2013,可以与数据库"部件"交互。我的数据库存储在a PP_data文件夹中。我能够在服务器资源管理器中查看连接,这意味着保存了连接字符串。但是,下面的代码会抛出2个错误:

  1. 错误13最佳重载方法匹配'System.Data.SqlClient.SqlCommand. sqlcommand . sql 'SqlCommand(string, System.Data.SqlClient.SqlConnection)'有一些无效参数
  2. 错误14参数2:无法从'string'转换为'System.Data.SqlClient.SqlConnection'

我不知道如何补救。下面是我的c#代码:

using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page
{
    protected void insertButton_Click(object sender, EventArgs e)
    {
        string connstring =     System.Configuration.ConfigurationManager.ConnectionStrings["connect"].ConnectionString;
        SqlCommand cmd = new SqlCommand("INSERT INTO PARTS VALUES('" + nameBox.Text + "', '" + descriptionBox.Text + "', '" + quantityBox.Text + "', '" + categoryList.SelectedValue + "')", connstring);
        cmd.ExecuteNonQuery();
    }
}
我对c#完全陌生,所以请记住这一点。谢谢你的帮助。

UPDATE:下面的代码抛出两个错误,它们都是

Error   15  The name 'conn' does not exist in the current context

我是c#的新手,但是看起来代码没有什么问题。名称"conn"在上面有明确的定义。

using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page
{
    protected void insertButton_Click(object sender, EventArgs e)
    {
        using (var conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["connect"].ConnectionString))
        using (var cmd = new SqlCommand(
            "INSERT INTO PARTS VALUES(@name, @description, @quantity, @category)", conn))
        {
            cmd.Parameters.AddWithValue("name", nameBox.Text);
            cmd.Parameters.AddWithValue("description", descriptionBox.Text);
            cmd.Parameters.AddWithValue("quantity", quantityBox.Text);
            cmd.Parameters.AddWithValue("category", categoryList.SelectedValue);
            conn.Open();
            cmd.ExecuteNonQuery();
        }

    }
}

SqlCommand连接本地数据库的字符串

例如:

using(var conn = new SqlConnection(connectionString))
using(var cmd = new SqlCommand(
    "INSERT INTO PARTS VALUES(@name, @description, ...)", conn))
{
    cmd.Parameters.AddWithValue("name", nameBox.Text);
    cmd.Parameters.AddWithValue("description", descriptionBox.Text);
    //...
    conn.Open();
    cmd.ExecuteNonQuery();
}

(注意你需要自己添加一些;我留下了不完整的,仅使用namedescription为例)

从你的配置连接值是什么?

SqlConnection conn = new SqlConnection(connstring);
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;

您需要先创建一个SqlConnection:

string connstring =     System.Configuration.ConfigurationManager.ConnectionStrings["connect"].ConnectionString;
SqlConnection conn = new SqlConnection(connstring);
SqlCommand cmd = new SqlCommand("INSERT INTO PARTS VALUES('" + nameBox.Text + "', '" + descriptionBox.Text + "', '" + quantityBox.Text + "', '" + categoryList.SelectedValue + "')"
                               , conn);
cmd.ExecuteNonQuery();

要养成的一些早期习惯:

  • 不连接SQL字符串。这有几个原因,其中最重要的是容易受到SQL注入攻击。
  • using语句中包装您的连接和命令。这可以确保在出现异常时正确关闭连接。

最终结果看起来像:

string connstring = ConfigurationManager.ConnectionStrings["connect"].ConnectionString;
using(SqlConnection conn = new SqlConnection(connstring))
{
    string sql = "INSERT INTO PARTS VALUES(@name, @description, @quantity, @categoryList)"
    using(SqlCommand cmd = new SqlCommand(sql , conn))
    {
        cmd.Parameters.AddWithValue("@name", nameBox.Text);
        ... etc.
        cmd.ExecuteNonQuery();
    }
}