当我使用此命令插入数据时,它完全正常工作..
using (con = new OleDbConnection(@"PROVIDER=Microsoft.Jet.OLEDB.4.0;" + @"DATA SOURCE=C:\Users\ABDUL MALEK\Documents\Visual Studio 2010\WebSites\WebSite1\App_Data\Database.mdb"))
{
cmd = new OleDbCommand();
cmd.CommandText = "insert into Customer(Customer_Phone,Customer_Name) VALUES('"+tb_CustNum.Text+"','"+tb_CustName.Text+"')";
cmd.Connection = con;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
Label1.Visible= true;
}
但是,在我添加或替换此命令后,“FROM子句中的语法错误”显示..
cmd.CommandText = "insert into Transaction(Product_Code,Date,Quantity,Total,Customer_Phone) values('" + ddl_PizzaCode.SelectedItem + "','" + DateTime.Now.ToString("dddd, dd MMMM yyyy") + "','" + tb_Quan.Text + "','" + Lb_Price.Text + "','" + tb_CustNum.Text + "')";
这是完整的代码隐藏:
public partial class _Default : System.Web.UI.Page
{
OleDbConnection con;
OleDbCommand cmd;
int Quan;
double TotalPrice;
//int i = 0;
string Date = DateTime.Now.ToString("dddd, dd MMMM yyyy");
protected void Page_Load(object sender, EventArgs e)
{
Lb_Date.Text = Date;
}
protected void bt_Calc_Click(object sender, EventArgs e)
{
Quan = Convert.ToInt32(tb_Quan.Text);
TotalPrice = Convert.ToDouble(Lb_Price.Text) * Quan;
Lb_TotalPrice.Text = TotalPrice.ToString();
}
protected void ddl_PizzaCode_SelectedIndexChanged(object sender, EventArgs e)
{
DataTable dt = new DataTable();
string strquery = "SELECT * FROM Product WHERE ID = " + ddl_PizzaCode.SelectedValue;
using (con = new OleDbConnection(@"PROVIDER= Microsoft.Jet.OLEDB.4.0;" + @"DATA SOURCE =C:\Users\ABDUL MALEK\Documents\Visual Studio 2010\WebSites\WebSite1\App_Data\Database.mdb"))
{
using (cmd = new OleDbCommand(strquery, con))
{
OleDbDataAdapter Da = new OleDbDataAdapter(cmd);
Da.Fill(dt);
}
Lb_PizzaName.Text = dt.Rows[0]["Product_Name"].ToString();
Lb_Price.Text = dt.Rows[0]["Price_per_Unit"].ToString();
}
}
protected void btn_Save_Click(object sender, EventArgs e)
{
using (con = new OleDbConnection(@"PROVIDER=Microsoft.Jet.OLEDB.4.0;" + @"DATA SOURCE=C:\Users\ABDUL MALEK\Documents\Visual Studio 2010\WebSites\WebSite1\App_Data\Database.mdb"))
{
cmd = new OleDbCommand();
cmd.CommandText = "insert into Transaction(Product_Code,Date,Quantity,Total,Customer_Phone) values('" + ddl_PizzaCode.SelectedItem + "','" + DateTime.Now.ToString("dddd, dd MMMM yyyy") + "','" + tb_Quan.Text + "','" + Lb_Price.Text + "','" + tb_CustNum.Text + "')";
cmd.CommandText = "insert into Customer(Customer_Phone,Customer_Name) VALUES('"+tb_CustNum.Text+"','"+tb_CustName.Text+"')";
cmd.Connection = con;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
Label1.Visible= true;
}
BindUserDetails();
}
protected void BindUserDetails()
{
DataSet ds = new DataSet();
DataSet ds2 = new DataSet();
string strquery = "SELECT * FROM Customer";
string strquery2 = "SELECT * FROM Transaction";
using (con = new OleDbConnection(@"PROVIDER=Microsoft.Jet.OLEDB.4.0;" + @"DATA SOURCE=C:\Users\ABDUL MALEK\Documents\Visual Studio 2010\WebSites\WebSite1\App_Data\Database.mdb"))
{
using (cmd = new OleDbCommand(strquery, con))
{
OleDbDataAdapter Da = new OleDbDataAdapter(cmd);
Da.Fill(ds);
}
using (cmd = new OleDbCommand(strquery2, con))
{
OleDbDataAdapter Da = new OleDbDataAdapter(cmd);
Da.Fill(ds2);
}
}
}
}
答案 0 :(得分:0)
单词DATE
是SQL Server中的关键字,因此当您在C#中将其用作字段名称时,需要使用方括号。这一行应该有效:
cmd.CommandText = "insert into Transaction(Product_Code, [Date], Quantity, Total, Customer_Phone) values('" + ddl_PizzaCode.SelectedItem + "','" + DateTime.Now.ToString("dddd, dd MMMM yyyy") + "','" + tb_Quan.Text + "','" + Lb_Price.Text + "','" + tb_CustNum.Text + "')";
答案 1 :(得分:0)
你有没有听说过SQL-Injection ....你很开放曝光。
您的所有查询都应该清理和参数化数据。切勿连接无法通过网络控制的内容。
在命令中使用参数基本上意味着使用指示参数的正确字符标识符。在SQL和Access中,您应该使用“@”符号。其他数据库使用不同参数。 VFP使用“?”作为占位符,SAP Advantage数据库使用“:”。
将命令(所有选择,插入,更新,删除)更改为类似..
cmd.CommandText =
@"insert into Customer
( Customer_Phone, Customer_Name )
VALUES
( @parmCustomerPhone, @parmCustomerName)";
cmd.Parameters.AddWithValue( "@parmCustomerPhone", tb_CustNum.Text );
cmd.Parameters.AddWithValue( "@parmCustomerName", tb_CustName.Text );
然后你应该好。如果有人将引号作为名称的一部分放入,例如“O'Mally”,则连接可能会失败。引用会错误地平衡你的报价并导致失败。
如果您的列是数字或日期数据类型,请确保您通过AddWithValue()调用发送的参数属于该类型。
此外,为了澄清,我明确地将insert语句中的值称为“@parmSomething”,因此您知道它是参数值,而不是实际的列名称并避免混淆...尤其是作为Web的初学者和查询。
最后如其他人所说。注意日期,时间和其他sql子句等保留字。这些应该被限定或包含在括号中,例如[日期]或Date
对于多个insert语句,SQL通常使用分号来标识一个语句的结尾,并允许在单个调用中有多个,例如
cmd.CommandText =
@"insert into Transaction
( Product_Code,
[Date],
Quantity,
Total,
Customer_Phone )
values
( @parmPizza,
@parmNow,
@parmQty,
@parmPrice,
@parmPhone );
insert into Customer
( Customer_Phone,
Customer_Name )
VALUES
( @parmCustPhone,
@parmCustName ) ";
// NOW, add all the parameters...
cmd.Parameters.AddWithValue( "@eachParmAbove", respectiveTextDateNumericValue );
...
...
...
然后执行它。希望这些样本的可读性也对您有所帮助。