使用asp.net中的C#将数据添加到数据库

时间:2015-09-15 18:09:18

标签: c# mysql asp.net sqlconnection sqlcommand

我需要使用txtbox和按钮(btnAdd)将内容添加到我的数据库中 这是我的代码,但是CommandType.Text;部分有错误,我无法修复它。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;

namespace _21542890_F
{
     public partial class Add_Product : System.Web.UI.Page
    {
        SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\Dylan\Documents\Company.mdf;Integrated Security=True;Connect Timeout=30");
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void lbtnHome_Click(object sender, EventArgs e)
        {
            Response.Redirect("Home Page.aspx");
        }

        protected void btnAdd_Click(object sender, EventArgs e)
        {
            con.Open();
            SqlCommand cmd = con.CreateCommand();
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "insert into Company values('"+txtProductName.Text+"','"+txtProductPrice.Text+"')";
            cmd.ExecuteNonQuery();
            con.Close();
        }
    }
}

3 个答案:

答案 0 :(得分:0)

我会先从string.format开始,看看我们在哪里......

string.format("insert into Company values('{0}','{1}')", txtProductName.Text,
txtProductPrice.Text);

答案 1 :(得分:0)

您不应直接在查询中引用文本字段,而应使用参数化输入来避免注入。它使任何人都不会发送自己可执行的代码/ sql。

从Microsoft看这个例子:

private static void UpdateDemographics(Int32 customerID,
    string demoXml, string connectionString)
{
    // Update the demographics for a store, which is stored  
    // in an xml column.  
    string commandText = "UPDATE Sales.Store SET Demographics = @demographics "
        + "WHERE CustomerID = @ID;";

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        SqlCommand command = new SqlCommand(commandText, connection);
        command.Parameters.Add("@ID", SqlDbType.Int);
        command.Parameters["@ID"].Value = customerID;

        // Use AddWithValue to assign Demographics. 
        // SQL Server will implicitly convert strings into XML.
        command.Parameters.AddWithValue("@demographics", demoXml);

        try
        {
            connection.Open();
            Int32 rowsAffected = command.ExecuteNonQuery();
            Console.WriteLine("RowsAffected: {0}", rowsAffected);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}

这是一个安全问题。至于你目前的代码;请包含错误消息/它正在中断。正如其他人之前所说的那样,如果您在SQL服务器上输入数据的列不按顺序排列和/或列的数量多于插入值的列数,则需要首先告诉服务器您使用的是哪些列将值插入。

这看起来类似于:

"INSERT Region (RegionID, RegionDescription) VALUES (5, 'NorthWestern')";

在您当前的代码中,它将是:

cmd.CommandText = "insert into Company (Product_Name, Product_Price)  VALUES ('"+txtProductName.Text+"','"+txtProductPrice.Text+"')";

通过这两项,我们真的需要更多信息!

就您的数据而言,为什么要将产品信息插入公司记录?除非您正在进行具体的用例,否则您应该考虑规范化并创建一个产品表来存储该信息。

答案 2 :(得分:0)

您的SQL语法可能有问题,您确定公司表中只有这两列吗?如果没有,则需要指定列名,否则SQL语句将失败。