繁体   English   中英

带有空格的C#SqlCommand文本框

[英]C# SqlCommand textbox with spaces

我正在使用Visual Studio 2015 Windows窗体应用程序

我的SqlCommand可以工作-除了在Street列( Street VARCHAR(70) )中,该列从文本框( streetTextBox.Text )获取输入,如果有空格或者不是数字, streetTextBox.Text引发错误。 我可以手动输入数据库就可以了,只要街道文本框只是一个没有空格的数字,该命令就可以使用。

comm2 = new SqlCommand("insert into Addresses(Street, City, aState, Zip) values (" + streetTextBox.Text + ",'" + cityTextBox.Text + "','" + aStateTextBox.Text + "','" + zipTextBox.Text + "')", conn);

try
{
    comm.ExecuteNonQuery();
    comm2.ExecuteNonQuery();
    MessageBox.Show("Saved...");
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}
finally
{
    conn.Close();
}

为什么不允许实际的街道保存? (即555街道名称)

您会收到此错误,因为如果是varchar,则需要用单引号引起来,而您会丢失它们。

values ('" + streetTextBox.Text + "'

但是请使用Parameters ,您可以防止此类问题和SQL注入

您的代码是sql注入攻击的门户。 您需要使用参数,而不是将字符串连接到sql。

        comm2 = new SqlCommand("insert into Addresses(Street, City, aState, Zip) values (@Street, @City,@aState, @Zip)", conn);
        comm2.Parameters.Add("@Street", SqlDbType.NVarChar).Value = streetTextBox.Text;
        comm2.Parameters.Add("@City", SqlDbType.NVarChar).Value = cityTextBox.Text;
        comm2.Parameters.Add("@aState", SqlDbType.NVarChar).Value = aStateTextBox.Text;
        comm2.Parameters.Add("@Zip", SqlDbType.NVarChar).Value = zipTextBox.Text;

        try
        {
            comm.ExecuteNonQuery();
            comm2.ExecuteNonQuery();
            MessageBox.Show("Saved...");
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {
            conn.Close();
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM