当我使用参数时,我在更新我的sql server 2005数据库时遇到了一些麻烦。在这里你可以看到通常必须工作的代码。我确切地说我已经做了其他处理,例如插入并且它工作得很好。
myCommand.Parameters.AddWithValue("@Pk", this.pk);
myCommand.Parameters.AddWithValue("@Titre", this.titre);
myCommand.CommandText = "Update Action set titre=@Titre where pk=@Pk";
//Execute la commande
myCommand.ExecuteNonQuery();
编辑:当我使用硬代码时,例如:
myCommand.CommandText = "Update Action set titre='title' where pk=@Pk";
它有效......
答案 0 :(得分:1)
当您忘记包含“CommandType”参数时,我看到了奇怪的结果。由于您使用内联SQL,因此应将其设置为“CommandType.Text”。
myCommand.Parameters.AddWithValue("@Pk", this.pk);
myCommand.Parameters.AddWithValue("@Titre", this.titre);
myCommand.CommandText = "Update Action set titre=@Titre where pk=@Pk";
// Added CommandType //
myCommand.CommandType = CommandType.Text;
//Execute la commande
myCommand.ExecuteNonQuery();
答案 1 :(得分:1)
我不知道你哪里出错这是我的工作代码
string strCon = @"Data Source=SYSTEM19\SQLEXPRESS;Initial Catalog=TransactionDB;Integrated Security=True";
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
SqlConnection cn = new SqlConnection(strCon);
SqlCommand cmd = new SqlCommand("select * from tblTransaction1", cn);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataSet ds = new DataSet();
da.Fill(ds);
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
txtName.Text = ds.Tables[0].Rows[i]["FirstName"].ToString();
txtName1.Text = ds.Tables[0].Rows[i]["LastName"].ToString();
}
}
}
按钮点击代码
protected void btnInsert_Click(object sender, EventArgs e)
{
SqlConnection cn = new SqlConnection(strCon);
obj1.FirstName = txtName.Text;
obj1.LastName = txtName1.Text;
if (obj1.upDate(cn))
{
}
}
示例类代码文件
private bool m_flag = false;
private string strFirstName;
private string strLastName;
public string FirstName
{
get { return strFirstName; }
set { strFirstName = value; }
}
public string LastName
{
get { return strLastName; }
set { strLastName = value; }
}
public bool upDate(SqlConnection con)
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
if (con.State != ConnectionState.Open)
{
con.Open();
}
try
{
cmd.Parameters.AddWithValue("@Fname", FirstName);
cmd.Parameters.AddWithValue("@Lname", LastName);
cmd.CommandText = "Update tblTransaction1 set LastName=@Lname where FirstName=@Fname";
if (cmd.ExecuteNonQuery() > 0)
{
m_flag = true;
}
}
catch
{
}
return m_flag;
}
样本图片
答案 2 :(得分:1)
我注意到将整个代码复制到一个新项目中会有所帮助。我遇到了很多次我的代码无法正常工作,然后第二天就无法正常工作,或者只会对其他人而不是我有效的情况。通常,这是由于在您的项目中添加和删除代码时项目的设计者所致。仅仅因为删除特定代码并不意味着该程序可以更新整个类/项目。
答案 3 :(得分:0)
如果你这样做:
Int32 rowsAffected = command.ExecuteNonQuery();
Console.WriteLine("RowsAffected: {0}", rowsAffected);
它说什么?
还要尝试使用模式名称为Action表添加前缀,例如:
myCommand.CommandText = "Update MySchema.Action set titre=@Titre where pk=@Pk";
因为有时它可能依赖于架构和用户更新此架构的权利。
答案 4 :(得分:0)
您可以尝试这样做:而不是像
那样添加参数myCommand.Parameters.AddWithValue("@Titre", this.titre);
你应该用数据类型添加它们。
myCommand.Parameters.Add(new SqlParameter("@Titre", SqlDbType.VarChar, 50));
myCommand.Parameters["@Titre"].Value = this.titre;
这样,最终的SQL将是Update Action set titre='titre'
而不是Update Action set titre=title
。看看在第二个语句中 titre 不在引号''。
答案 5 :(得分:0)
在声明命令后尝试添加参数。
myCommand.CommandText = "Update Action set titre=@Titre where pk=@Pk";
myCommand.Parameters.AddWithValue("@Pk", this.pk);
myCommand.Parameters.AddWithValue("@Titre", this.titre);
//Execute la commande
myCommand.ExecuteNonQuery();
我在这里发现了类似的(不完全相同):http://forums.asp.net/t/1249831.aspx/1