none
OLDDB的Update RRS feed

  • 问题

  •             OleDbCommand cmd1 = new OleDbCommand();
                cmd1.Connection = conn;
                OleDbParameter[] Params1 = new OleDbParameter[2];
                Params1[0] = new OleDbParameter();
                Params1[0].OleDbType = OleDbType.BSTR;
                Params1[0].ParameterName = "ID";
                Params1[0].Value = "e9318276-46d6-47e5-9230-d0e6493253f3";

                Params1[1] = new OleDbParameter();
                Params1[1].OleDbType = OleDbType.Numeric;
                Params1[1].ParameterName = "Latitude";
                Params1[1].Value = 3;

                Params1[2] = new OleDbParameter();
                Params1[2].OleDbType = OleDbType.Numeric;
                Params1[2].ParameterName = "Longitude";
                Params1[2].Value = 117.983956;

                Params1[3] = new OleDbParameter();
                Params1[3].OleDbType = OleDbType.BSTR;
                Params1[3].ParameterName = "TitleInfo";
                Params1[3].Value = Guid.NewGuid().ToString();

                Params1[4] = new OleDbParameter();
                Params1[4].OleDbType = OleDbType.BSTR;
                Params1[4].ParameterName = "SymbolInfo";
                Params1[4].Value = Guid.NewGuid().ToString();

                Params1[5] = new OleDbParameter();
                Params1[5].OleDbType = OleDbType.LongVarChar;
                Params1[5].ParameterName = "Description";
                Params1[5].Value = "aaaaaaaaaaaaaaaaaaa";

                Params1[6] = new OleDbParameter();
                Params1[6].OleDbType = OleDbType.Boolean;
                Params1[6].ParameterName = "HasSymbol";
                Params1[6].Value = true;

                cmd1.Parameters.AddRange(Params1);

                cmd1.CommandText = "UPDATE Symbol set Latitude=@Latitude, Longitude=@Longitude, TitleInfo=@TitleInfo, SymbolInfo=@SymbolInfo, Description=@Description, HasSymbol=@HasSymbol WHERE ID=@ID";

                int b = cmd1.ExecuteNonQuery();
                MessageBox.Show(b.ToString());


    看段代码.主要是SQL语句那行..
    我现在碰到的问题是只有WHERE条件的ID可以使用Parameter,句中set值的部分使用Parameter会执行0行.
    ID为文本类型
    Latitude为数字类型
    Longitude为数字类型
    TitleInfo为数字类型
    SymbolInfo为数字类型
    Description为备注类型
    HasSymbol为是/否类型
    如果把SQL换成"UPDATE Symbol set Latitude=6, Longitude=7, TitleInfo='e9318276-46d6-47e5-9230-d0e6493253f3', SymbolInfo='e9318276-46d6-47e5-9230-d0e6493253f3', Description='aaaaaaaaaaaaa', HasSymbol=1 WHERE ID=@ID"便可以执行区别就是WHERE条件,如果其他的换成参数便不可以运行..不知原因.

    但可以执行插入操作"INSERT INTO Symbol VALUES (@ID, @Latitude, @Longitude, @TitleInfo, @SymbolInfo, @Description, @HasSymbol)"

    所以我在想,是不是Update的赋值的地方不可以使用参数.?


    有人说,充满技术的生活枯燥无味.. 我笑他们不懂.因为只有技术才能充实生活.. 学习就像生活,都需要善于总结,才能发现问题,取得进步.. 生活中充满了数学算式与结构,只要我们善于观察和思考..
    2009年11月11日 6:56

答案

  • 所有语句都可以使用参数的
    但是有一点你需要注意
    在OleDbCommand 是不区分Parameter的名字的
    所以你可以直接使用?
    cmd1.CommandText = "UPDATE Symbol set Latitude=?, Longitude=?, TitleInfo=?, SymbolInfo=?, Description=?, HasSymbol=? WHERE ID=?";
    但是有一点所有参数都是按照顺序来的
    你这里的cmd1.Parameters.AddRange(Params1); 中的Params1数组中的参数必须依次是 lastiude,longitude.......

    否则就.会出错
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!My blog~~~
    2009年11月11日 8:01
    版主