[英]C# Sql Data Reader error
我有一個包含11個文本框和1個單選按鈕列表的Web表單(包含兩個LI)。
txtCustID
必需(通過從數據庫獲取最大CustID編號並遞增值生成)
txtFirstname - Requried
txtSurname - Required
rdbGender -> Male, Female - Required
txtAge - Required
txtAddress1 - Requried
txtAddress2 - Not required
txtCity - Required
txtPhone - Required
txtMobile - Not required
txtEmail1 - Required
txtEmail2 - Required (Used to confirm Email1, not passed to DB)
有一個按鈕btnAdd,它將文本值傳遞到數據庫中的存儲過程“ AddRecord”。
它返回錯誤“過程或函數'AddRecord'期望參數'@Surname',但未提供”。
我找不到問題,因為提供了@Surname?
這是btnClick事件代碼:
protected void btnAdd_Click(object sender, EventArgs e)
{
SqlCommand command = new SqlCommand();
command.Connection = conn;
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "AddRecord";
command.Connection.Open();
SqlParameter pCustID = new SqlParameter();
pCustID.ParameterName = "@CustID";
pCustID.SqlDbType = SqlDbType.Int;
pCustID.Direction = ParameterDirection.Input;
pCustID.Value = txtCustID.Text;
command.Parameters.Add(pCustID);
SqlParameter pFirst = new SqlParameter();
pFirst.ParameterName = "@First";
pFirst.SqlDbType = SqlDbType.VarChar;
pFirst.Direction = ParameterDirection.Input;
pFirst.Value = txtFirstName.Text;
command.Parameters.Add(pFirst);
SqlParameter pSurn = new SqlParameter();
pSurn.ParameterName = "@Surname";
pSurn.SqlDbType = SqlDbType.VarChar;
pSurn.Direction = ParameterDirection.Input;
pSurn.Value = txtSurname.Text;
command.Parameters.Add(pSurn);
SqlParameter pGen = new SqlParameter();
pSurn.ParameterName = "@Gender";
pSurn.SqlDbType = SqlDbType.VarChar;
pSurn.Direction = ParameterDirection.Input;
pSurn.Value = rblGender.SelectedValue;
command.Parameters.Add(pGen);
SqlParameter pAge = new SqlParameter();
pSurn.ParameterName = "@Surname";
pSurn.SqlDbType = SqlDbType.Int;
pSurn.Direction = ParameterDirection.Input;
pSurn.Value = txtAge.Text;
command.Parameters.Add(pAge);
SqlParameter pAdd1 = new SqlParameter();
pSurn.ParameterName = "@Address1";
pSurn.SqlDbType = SqlDbType.VarChar;
pSurn.Direction = ParameterDirection.Input;
pSurn.Value = txtAddress1.Text;
command.Parameters.Add(pAdd1);
SqlParameter pAdd2 = new SqlParameter();
pSurn.ParameterName = "@Address2";
pSurn.SqlDbType = SqlDbType.VarChar;
pSurn.Direction = ParameterDirection.Input;
pSurn.Value = txtAddress2.Text;
command.Parameters.Add(pAdd2);
SqlParameter pCity = new SqlParameter();
pSurn.ParameterName = "@City";
pSurn.SqlDbType = SqlDbType.VarChar;
pSurn.Direction = ParameterDirection.Input;
pSurn.Value = txtCity.Text;
command.Parameters.Add(pCity);
SqlParameter pPhone = new SqlParameter();
pSurn.ParameterName = "@Phone";
pSurn.SqlDbType = SqlDbType.VarChar;
pSurn.Direction = ParameterDirection.Input;
pSurn.Value = txtPhone.Text;
command.Parameters.Add(pPhone);
SqlParameter pMobile = new SqlParameter();
pSurn.ParameterName = "@Mobile";
pSurn.SqlDbType = SqlDbType.VarChar;
pSurn.Direction = ParameterDirection.Input;
pSurn.Value = txtMobile.Text;
command.Parameters.Add(pMobile);
SqlParameter pEmail = new SqlParameter();
pSurn.ParameterName = "@Email";
pSurn.SqlDbType = SqlDbType.VarChar;
pSurn.Direction = ParameterDirection.Input;
pSurn.Value = txtEmail1.Text;
command.Parameters.Add(pEmail);
SqlDataReader reader = command.ExecuteReader();
reader.Dispose();
command.Dispose();
conn.Dispose();
}
}
這是存儲過程代碼:
CREATE PROCEDURE AddRecord
@CustID INT,
@First VARCHAR,
@Surname VARCHAR,
@Gender VARCHAR,
@Age INT,
@Address1 VARCHAR,
@Address2 VARCHAR,
@City VARCHAR,
@Phone VARCHAR,
@Mobile VARCHAR,
@Email VARCHAR
AS
INSERT INTO Customer
VALUES
(@CustID, @First, @Surname, @Gender, @Age, @Address1, @Address2,
@City, @Phone, @Mobile, @Email);
在將pSurn初始化后,您已經為所有所有參數的其余部分引用了相同的變量,並且還為Age參數將參數名稱指定為“ @Surname” ...
試試下面
protected void btnAdd_Click(object sender, EventArgs e)
{
SqlCommand command = new SqlCommand();
command.Connection = conn;
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "AddRecord";
command.Connection.Open();
SqlParameter pCustID = new SqlParameter();
pCustID.ParameterName = "@CustID";
pCustID.SqlDbType = SqlDbType.Int;
pCustID.Direction = ParameterDirection.Input;
pCustID.Value = txtCustID.Text;
command.Parameters.Add(pCustID);
SqlParameter pFirst = new SqlParameter();
pFirst.ParameterName = "@First";
pFirst.SqlDbType = SqlDbType.VarChar;
pFirst.Direction = ParameterDirection.Input;
pFirst.Value = txtFirstName.Text;
command.Parameters.Add(pFirst);
SqlParameter pSurn = new SqlParameter();
pSurn.ParameterName = "@Surname";
pSurn.SqlDbType = SqlDbType.VarChar;
pSurn.Direction = ParameterDirection.Input;
pSurn.Value = txtSurname.Text;
command.Parameters.Add(pSurn);
SqlParameter pGen = new SqlParameter();
pGen.ParameterName = "@Gender";
pGen.SqlDbType = SqlDbType.VarChar;
pGen.Direction = ParameterDirection.Input;
pGen.Value = rblGender.SelectedValue;
command.Parameters.Add(pGen);
SqlParameter pAge = new SqlParameter();
pAge.ParameterName = "@Age";
pAge.SqlDbType = SqlDbType.Int;
pAge.Direction = ParameterDirection.Input;
pAge.Value = txtAge.Text;
command.Parameters.Add(pAge);
SqlParameter pAdd1 = new SqlParameter();
pAdd1.ParameterName = "@Address1";
pAdd1.SqlDbType = SqlDbType.VarChar;
pAdd1.Direction = ParameterDirection.Input;
pAdd1.Value = txtAddress1.Text;
command.Parameters.Add(pAdd1);
SqlParameter pAdd2 = new SqlParameter();
pAdd2.ParameterName = "@Address2";
pAdd2.SqlDbType = SqlDbType.VarChar;
pAdd2.Direction = ParameterDirection.Input;
pAdd2.Value = txtAddress2.Text;
command.Parameters.Add(pAdd2);
SqlParameter pCity = new SqlParameter();
pCity.ParameterName = "@City";
pCity.SqlDbType = SqlDbType.VarChar;
pCity.Direction = ParameterDirection.Input;
pCity.Value = txtCity.Text;
command.Parameters.Add(pCity);
SqlParameter pPhone = new SqlParameter();
pPhone.ParameterName = "@Phone";
pPhone.SqlDbType = SqlDbType.VarChar;
pPhone.Direction = ParameterDirection.Input;
pPhone.Value = txtPhone.Text;
command.Parameters.Add(pPhone);
SqlParameter pMobile = new SqlParameter();
pMobile.ParameterName = "@Mobile";
pMobile.SqlDbType = SqlDbType.VarChar;
pMobile.Direction = ParameterDirection.Input;
pMobile.Value = txtMobile.Text;
command.Parameters.Add(pMobile);
SqlParameter pEmail = new SqlParameter();
pEmail.ParameterName = "@Email";
pEmail.SqlDbType = SqlDbType.VarChar;
pEmail.Direction = ParameterDirection.Input;
pEmail.Value = txtEmail1.Text;
command.Parameters.Add(pEmail);
SqlDataReader reader = command.ExecuteReader();
reader.Dispose();
command.Dispose();
conn.Dispose();
}
}
這里有大量可疑物品。
這確實不是一個很大的答案,但我希望這能使您朝正確的方向前進。
嘗試這個
protected void btnAdd_Click(object sender, EventArgs e)
{
SqlCommand command = new SqlCommand();
command.Connection = conn;
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "AddRecord";
command.Connection.Open();
SqlParameter pCustID = new SqlParameter();
pCustID.ParameterName = "@CustID";
pCustID.SqlDbType = SqlDbType.Int;
pCustID.Direction = ParameterDirection.Input;
pCustID.Value = txtCustID.Text;
command.Parameters.Add(pCustID);
SqlParameter pFirst = new SqlParameter();
pFirst.ParameterName = "@First";
pFirst.SqlDbType = SqlDbType.VarChar;
pFirst.Direction = ParameterDirection.Input;
pFirst.Value = txtFirstName.Text;
command.Parameters.Add(pFirst);
SqlParameter pSurn = new SqlParameter();
pSurn.ParameterName = "@Surname";
pSurn.SqlDbType = SqlDbType.VarChar;
pSurn.Direction = ParameterDirection.Input;
pSurn.Value = txtSurname.Text;
command.Parameters.Add(pSurn);
SqlParameter pGen = new SqlParameter();
pSurn.ParameterName = "@Gender";
pSurn.SqlDbType = SqlDbType.VarChar;
pSurn.Direction = ParameterDirection.Input;
pSurn.Value = rblGender.SelectedValue;
command.Parameters.Add(pGen);
SqlParameter pAge = new SqlParameter();
pSurn.ParameterName = "@Age";
pSurn.SqlDbType = SqlDbType.Int;
pSurn.Direction = ParameterDirection.Input;
pSurn.Value = txtAge.Text;
command.Parameters.Add(pAge);
SqlParameter pAdd1 = new SqlParameter();
pSurn.ParameterName = "@Address1";
pSurn.SqlDbType = SqlDbType.VarChar;
pSurn.Direction = ParameterDirection.Input;
pSurn.Value = txtAddress1.Text;
command.Parameters.Add(pAdd1);
SqlParameter pAdd2 = new SqlParameter();
pSurn.ParameterName = "@Address2";
pSurn.SqlDbType = SqlDbType.VarChar;
pSurn.Direction = ParameterDirection.Input;
pSurn.Value = txtAddress2.Text;
command.Parameters.Add(pAdd2);
SqlParameter pCity = new SqlParameter();
pSurn.ParameterName = "@City";
pSurn.SqlDbType = SqlDbType.VarChar;
pSurn.Direction = ParameterDirection.Input;
pSurn.Value = txtCity.Text;
command.Parameters.Add(pCity);
SqlParameter pPhone = new SqlParameter();
pSurn.ParameterName = "@Phone";
pSurn.SqlDbType = SqlDbType.VarChar;
pSurn.Direction = ParameterDirection.Input;
pSurn.Value = txtPhone.Text;
command.Parameters.Add(pPhone);
SqlParameter pMobile = new SqlParameter();
pSurn.ParameterName = "@Mobile";
pSurn.SqlDbType = SqlDbType.VarChar;
pSurn.Direction = ParameterDirection.Input;
pSurn.Value = txtMobile.Text;
command.Parameters.Add(pMobile);
SqlParameter pEmail = new SqlParameter();
pSurn.ParameterName = "@Email";
pSurn.SqlDbType = SqlDbType.VarChar;
pSurn.Direction = ParameterDirection.Input;
pSurn.Value = txtEmail1.Text;
command.Parameters.Add(pEmail);
SqlDataReader reader = command.ExecuteReader();
reader.Dispose();
command.Dispose();
conn.Dispose();
}
}
在您的年齡字段中,您使用的是@Surname。請更改該值,然后重試
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.