Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ExecuteOnQuery。连接属性尚未初始化_C#_Sql Server_Winforms - Fatal编程技术网

C# ExecuteOnQuery。连接属性尚未初始化

C# ExecuteOnQuery。连接属性尚未初始化,c#,sql-server,winforms,C#,Sql Server,Winforms,嘿,伙计们,我的代码有这个错误,但似乎在其他新项目上工作,它总是突出显示ExecuteOnQuery。 我试图用谷歌和这个网站来搜索解决方案,但伙计们,我真的不知道为什么会出现下面的错误 我还在mssql express中使用 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq;

嘿,伙计们,我的代码有这个错误,但似乎在其他新项目上工作,它总是突出显示ExecuteOnQuery。 我试图用谷歌和这个网站来搜索解决方案,但伙计们,我真的不知道为什么会出现下面的错误

我还在mssql express中使用

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace AssetInsert
{
    public partial class AssetInsert : Form
    {
        public AssetInsert()
        {
            InitializeComponent();
        }

    private void ICButton_Click(object sender, EventArgs e)
    {
        DBConn.DBOpen();
        lbConnTest.Text = "OK";
        DBConn.DBClose();
    }
    private void ISaveButton_Click(object sender, EventArgs e)
    {
        string sql = (@"INSERT INTO dbo.HWTable(Brand, CPU, RAM, HSerial, Model, ACode, PYear, UName, Position, Depart) VALUES('" + BrandCBox.Text + "', '" + CPUTBox.Text + "', '" + RAMTBox.Text + "', '" + HSerialTBox.Text + "', '" + ModelTBox.Text + "', '" + ACodeTBox.Text + "', '" + PYearPicker.Text + "', '" + UNameTBox.Text + "', '" + PositionCBox.Text + "', '" + DepartCBox.Text + "');");
        SqlCommand cmd = new SqlCommand(sql);
        DBConn.DBOpen();
        cmd.Parameters.AddWithValue("@Brand", BrandCBox.Text);
        cmd.Parameters.AddWithValue("@CPU", CPUTBox.Text);
        cmd.Parameters.AddWithValue("@RAM", RAMTBox.Text);
        cmd.Parameters.AddWithValue("@HSerial", HSerialTBox.Text);
        cmd.Parameters.AddWithValue("@Model", ModelTBox.Text);
        cmd.Parameters.AddWithValue("@ACode", ACodeTBox.Text);
        cmd.Parameters.AddWithValue("@PYear", PYearPicker.Text);
        cmd.Parameters.AddWithValue("@UName", UNameTBox.Text);
        cmd.Parameters.AddWithValue("@Position", PositionCBox.Text);
        cmd.Parameters.AddWithValue("@Depart", DepartCBox.Text);
        cmd.ExecuteNonQuery(); //<--error here
        DBConn.DBClose();      
    }

    public class DBConn
    {
        public static void DBOpen()
        {
            string source = @"Data Source = 10.201.0.17; Initial Catalog = ITinven; USER ID = sa; PASSWORD = jc9989;";
            SqlConnection conn;
            conn = new SqlConnection(source);
            conn.Open();
        }

        public static void DBClose()
        {
            string source = @"Data Source = 10.201.0.17; Initial Catalog = ITinven; USER ID = sa; PASSWORD = jc9989;";
            SqlConnection conn;
            conn = new SqlConnection(source);
            conn.Close();
        }
    } 

}
使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用系统数据;
使用系统图;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用System.Windows.Forms;
使用System.Data.SqlClient;
名称空间AssetInsert
{
公共部分类资产插入:表单
{
公共资产服务()
{
初始化组件();
}
私有无效ICButton\u单击(对象发送者,事件参数e)
{
DBConn.DBOpen();
lbconnstest.Text=“确定”;
DBConn.DBClose();
}
私有void ISaveButton_单击(对象发送者,事件参数e)
{
字符串sql=(@“插入dbo.HWTable(品牌、CPU、RAM、HSerial、模型、ACode、PYear、UName、Position、deep)值(“+BrandCBox.Text+”、“+CPUTBox.Text+”、“+RAMTBox.Text+”、“+HSerialTBox.Text+”、“+ModelTBox.Text+”、“+ACodeTBox.Text+”、“+PYearPicker.Text+”、“+UNameTBox.Text+”、“”+PositionCBox.Text+“,”+DepartCBox.Text+“);”;
SqlCommand cmd=新的SqlCommand(sql);
DBConn.DBOpen();
cmd.Parameters.AddWithValue(“@Brand”,BrandCBox.Text);
cmd.Parameters.AddWithValue(“@CPU”,CPUTBox.Text);
cmd.Parameters.AddWithValue(“@RAM”,RAMTBox.Text);
cmd.Parameters.AddWithValue(“@HSerial”,HSerialTBox.Text);
cmd.Parameters.AddWithValue(“@Model”,ModelTBox.Text);
cmd.Parameters.AddWithValue(“@ACode”,ACodeTBox.Text);
cmd.Parameters.AddWithValue(“@PYear”,PYearPicker.Text);
cmd.Parameters.AddWithValue(“@UName”,UNameTBox.Text);
cmd.Parameters.AddWithValue(“@Position”,PositionCBox.Text);
cmd.Parameters.AddWithValue(“@Depart”,DepartCBox.Text);

cmd.ExecuteNonQuery();//错误消息已清除

连接属性尚未初始化

连接您的
SqlComamnd
SqlConnection

SqlCommand cmd = new SqlCommand(sql, conn);
奇怪的是,您使用字符串连接添加插入值,但也尝试将它们作为参数添加。读取:。并且您不需要像这样的
DBOpen
DBClose
方法

作为最佳实践,请使用来处理
SqlComamnd
SqlConnection
而不是在其他方法中手动调用
.Close()
方法,并停止使用
AddWithValue
方法。这可能会产生意外的结果。请改用或使用其重载

阅读:

当您的代码中出现任何错误消息或异常时,请仔细阅读它们。再看一次,再看一次。这会使您的问题更容易解决。

(1)传递参数的正确方法

(2) 始终使用try-catch-block

(3) 使用Sqlcommand文本和sql连接初始化Sqlcommand的正确方法

// see how parameters are used

SqlCommand sqlcommand0;

using (SqlConnection conn = new SqlConnection(con_str))

{

    conn.Open();

    string sql = "INSERT INTO dbo.HWTable(Brand, CPU, RAM, HSerial, Model, ACode, PYear, UName, Position, Depart) VALUES(@Brand, @CPU, @RAM, @HSerial, @Model, @ACode, @PYear, @UName, @Position, @Depart)";       // (1)

    try                                                // (2)

    {

        using (sqlcommand0 = new SqlCommand(commandtext, conn)) // (3)

        {

            sqlcommand0.Parameters.Add(new SqlParameter("@Brand", Brand.Text));

            sqlcommand0.Parameters.Add(new SqlParameter("@CPU", CPU.Text));

            ....

            sqlcommand0.ExecuteNonQuery();

        }

    }

    catch

    {

        Console.WriteLine("Count not insert data into table.");

    }

}

使用参数化查询总是一种更好的方法,但我不认为这是真正的问题。但这应该可以解决问题,因为sql语句中不存在参数品牌、CPU等,这就是为什么我将它们添加到语句中以使其工作。为什么为-1?我没有投反对票,但我认为只是建议使用参数化方法不能让你的答案有帮助。很明显,OP需要连接他的<代码> Sql命令> />代码> <代码> SqLConnect 。但是你甚至没有提到它。使用块引号而不是代码格式化使事情很难阅读。请考虑修复它。@ Karla Good听:
// see how parameters are used

SqlCommand sqlcommand0;

using (SqlConnection conn = new SqlConnection(con_str))

{

    conn.Open();

    string sql = "INSERT INTO dbo.HWTable(Brand, CPU, RAM, HSerial, Model, ACode, PYear, UName, Position, Depart) VALUES(@Brand, @CPU, @RAM, @HSerial, @Model, @ACode, @PYear, @UName, @Position, @Depart)";       // (1)

    try                                                // (2)

    {

        using (sqlcommand0 = new SqlCommand(commandtext, conn)) // (3)

        {

            sqlcommand0.Parameters.Add(new SqlParameter("@Brand", Brand.Text));

            sqlcommand0.Parameters.Add(new SqlParameter("@CPU", CPU.Text));

            ....

            sqlcommand0.ExecuteNonQuery();

        }

    }

    catch

    {

        Console.WriteLine("Count not insert data into table.");

    }

}