0

当我使用参数时,我在更新我的 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";

有用...

4

6 回答 6

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();
于 2012-04-25T14:47:41.863 回答
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;
    }

示例图像

使用来自 SQL 的数据的表单

更新前的数据库数据

更改姓氏

更新后

于 2012-04-25T16:04:17.420 回答
1

我注意到将整个代码复制到一个新项目中会有所帮助。我遇到过很多次我的代码可以工作,然后第二天就不行了,或者只为别人而不是我工作。通常这是由于在项目中添加和删除代码时项目的设计者造成的。仅仅因为您删除特定代码并不意味着程序可以更新整个类/项目。

于 2019-01-17T14:52:24.087 回答
0

如果你这样做:

Int32 rowsAffected = command.ExecuteNonQuery();
Console.WriteLine("RowsAffected: {0}", rowsAffected);

它说什么 ?

还尝试使用架构名称为您的 Action 表添加前缀,例如:

myCommand.CommandText = "Update MySchema.Action set titre=@Titre where pk=@Pk";

因为有时它可以依赖于模式和用户的权限来更新这个模式。

于 2012-04-25T14:06:40.230 回答
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. 看看第二个语句中的滴度不在引号''内。

于 2012-04-25T14:53:25.220 回答
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

于 2012-04-25T15:38:14.570 回答