【问题标题】:C# help ExecuteNonqueryC# 帮助 ExecuteNonquery
【发布时间】:2013-02-08 03:56:09
【问题描述】:

我真的不知道为什么我会收到这条消息

ExecuteNonQuery:CommandText 属性尚未初始化

我的代码完全没有错误,而且当我查看它时它看起来不错。我一直在网上寻找解决方案,但找不到任何解决方案。这是我的代码。非常感谢任何帮助。

SqlConnection conn = new SqlConnection("Data Source=VALONS;Initial Catalog=gym;Integrated Security=True");
    SqlCommand cmd;
    public NewMem()
    {
        InitializeComponent();
    }

    private void label2_Click(object sender, EventArgs e)
    {

    }

    private void NewMem_Load(object sender, EventArgs e)
    {

    }

    private void btnSave_Click(object sender, EventArgs e)
    {
        try
        {
            conn.Open();
            cmd = new SqlCommand("Insert into member(SocialSecurity, Name, City, Street, Zipcode, Email, Phone) values ('" + textSocialSecurity + "','" + textName + "','" + textCity + "','" + textStreet + "','" + textZipCode + "','" + textEmail + "','" + textPhone + "')" + conn);
            cmd.ExecuteNonQuery();
            MessageBox.Show("You have successfully inserted values in Member");
            conn.Close();

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);

        }
    }

【问题讨论】:

  • 您知道您的代码存在名为 sql injection 的安全问题吗?
  • 也许是 ", conn" 而不是 "+ conn"?
  • 当 O'Reilly 先生输入他的名字时会发生什么?您需要为此使用 SqlParameters。

标签: c#


【解决方案1】:

该问题可能与数据类型不匹配有关。 由于sql注入问题,请尝试使用参数而不是直接值。

cmd = new SqlCommand("Insert into member(SocialSecurity, Name, City, Street, Zipcode, Email, Phone) values (:1,:2,:3,:4,:5,:6,:7)", conn);
cmd.parameters.clear();
cmd.parameters.Add("1", textSocialSecurity);
cmd.parameters.Add("2", textName);
...
cmd.parameters.Add("7", textPhone);
cmd.ExecuteNonQuery();

【讨论】:

  • AddWithParameter() 而不是Add()cmd.Parameters
  • 添加已被弃用。使用 AddWithValue
【解决方案2】:

你可能必须这样做:

cmd.CommandText = @"Insert into member(SocialSecurity, Name, City, Street, Zipcode, Email, Phone) values ('" + textSocialSecurity + "','" + textName + "','" + textCity + "','" + textStreet + "','" + textZipCode + "','" + textEmail + "','" + textPhone + "')";

但是你有严重的问题。而且您对 sql 注入持开放态度。

参数化查询。

【讨论】:

    【解决方案3】:

    您的命令需要被告知它是什么类型。存储过程,命令文本等。我​​不记得方法,但这就是问题所在。

    我建议您分阶段进行 - 打开连接,创建命令对象并设置连接属性,设置它的类型并执行 SQL 文本。我还建议使用带有参数的存储过程,因为它可以解决 SQL 注入问题。

    【讨论】:

    • 我会发现知道为什么我的答案被否决非常有用
    猜你喜欢
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多