Reputation: 171
i cant seem to insert the data from the gridview to a database. i run it, and it runs smoothly but no data entry in my database. where is my error? i used for loop because the gridview may have more than 1 items per transaction. thanks!
protected void btnSave_Click(object sender, EventArgs e)
{
string transIDs = transID.Text;
string datefiled = lblDateFiled.Text;
string requisitioner = txtName.Text;
string company = txtComp.Text;
string branch = txtBranch.Text;
string bu = txtBU.Text;
string dept = txtDept.Text;
string sec = txtSec.Text;
string reason = txtReason.Text;
int accept = 0;
if(rblAccept.SelectedIndex == 0)
{
accept = 1;
}
else
{
accept = 0;
}
//foreach (GridViewRow row in gvModal.Rows)
//{
for(int i = 0; i < gvModal.Rows.Count; i++)
{
string dateA = DateTime.Now.ToString("yyyy-MM-dd");
Utility u = new Utility();
string conn = u.connect();
Label type = (Label)gvModal.Rows[i].Cells[1].FindControl("lbltype");
Label model = (Label)gvModal.Rows[i].Cells[2].FindControl("lblModel");
Label quantity = (Label)gvModal.Rows[i].Cells[3].FindControl("lblQuan");
Label unit = (Label)gvModal.Rows[i].Cells[4].FindControl("lblUnit");
//string type = row.Cells[1].Text;
//string model = row.Cells[2].Text;
//string quantity = row.Cells[3].Text;
//string unit = row.Cells[4].Text;
SqlConnection connUser = new SqlConnection(conn);
SqlCommand read = connUser.CreateCommand();
string query = "INSERT INTO Mosef_Alert values (@Mosef_No, @Branch, @BU, @Dept, @Section, @Requisitioner, @Accepted, @Date_Accepted, @Reason, @MOSEF_Date, @type, @model, @quantity, @unit)";
connUser.Open();
read.CommandText = query;
read.Parameters.Add(new SqlParameter("Mosef_No", transIDs));
read.Parameters.Add(new SqlParameter("Branch", branch));
read.Parameters.Add(new SqlParameter("BU", bu));
read.Parameters.Add(new SqlParameter("Dept", dept));
read.Parameters.Add(new SqlParameter("Section", sec));
read.Parameters.Add(new SqlParameter("Requisitioner", requisitioner));
read.Parameters.Add(new SqlParameter("Accepted", accept));
read.Parameters.Add(new SqlParameter("Date_Accepted", dateA));
read.Parameters.Add(new SqlParameter("Reason", reason));
read.Parameters.Add(new SqlParameter("MOSEF_Date", lblDateFiled.Text));
read.Parameters.Add(new SqlParameter("type", type));
read.Parameters.Add(new SqlParameter("model", model));
read.Parameters.Add(new SqlParameter("quantity", quantity));
read.Parameters.Add(new SqlParameter("unit", unit));
//read.ExecuteNonQuery();
read.Parameters.Clear();
}
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append(@"<script type ='text/javascript'>");
sb.Append("alert('Records Updated');");
sb.Append("$('editModal').modal('hide');");
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "EditHideModalScript", sb.ToString(), false);
}
Upvotes: 0
Views: 65
Reputation: 3800
You need to put @
with parameter name like
read.Parameters.Add(new SqlParameter("@Mosef_No", transIDs));
read.Parameters.Add(new SqlParameter("@Branch", branch));
read.Parameters.Add(new SqlParameter("@BU", bu));
read.Parameters.Add(new SqlParameter("@Dept", dept));
read.Parameters.Add(new SqlParameter("@Section", sec));
read.Parameters.Add(new SqlParameter("@Requisitioner", requisitioner));
read.Parameters.Add(new SqlParameter("@Accepted", accept));
read.Parameters.Add(new SqlParameter("@Date_Accepted", dateA));
read.Parameters.Add(new SqlParameter("@Reason", reason));
read.Parameters.Add(new SqlParameter("@MOSEF_Date", lblDateFiled.Text));
read.Parameters.Add(new SqlParameter("@type", type));
read.Parameters.Add(new SqlParameter("@model", model));
read.Parameters.Add(new SqlParameter("@quantity", quantity));
read.Parameters.Add(new SqlParameter("@unit", unit));
You are passing control (Label) instead of control value(Label.Text), may be a typo. Update as below:
read.Parameters.Add(new SqlParameter("@type", type.Text));
read.Parameters.Add(new SqlParameter("@model", model.Text));
read.Parameters.Add(new SqlParameter("@quantity", quantity.Text));
read.Parameters.Add(new SqlParameter("@unit", unit.Text));
Upvotes: 1
Reputation: 29026
You Miss @
while representing the Command; Use like this:
read.Parameters.Add(new SqlParameter("@Mosef_No", transIDs));
read.Parameters.Add(new SqlParameter("@Branch", branch));
read.Parameters.Add(new SqlParameter("@BU", bu));
MSDN says that: Use caution when you use this overload of the SqlParameter constructor to specify integer parameter values. Because this overload takes a value of type Object, you must convert the integral value to an Object type when the value is zero, as the following C# example demonstrates.
You can use the same like the following :
read.Parameters.Add("@Mosef_No",SqlDbType.Int).Value= transIDs;
read.Parameters.Add("@Branch",SqlDbType.VarChar).Value= branch;
read.Parameters.Add("@BU",SqlDbType.Char).Value= bu;
Where SqlDbType
is an enumeration that help you to specify the type of data.
Upvotes: 0