首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新/插入表

问更新/插入表
EN

Stack Overflow用户
提问于 2012-05-04 13:59:50
回答 4查看 151关注 0票数 1

我必须更新Server上的表,但首先必须检查表中的现有数据,因此如果存在数据,则更新它,如果不进行新的插入:

代码语言:javascript
复制
cmd_sql.CommandText = " SELECT BrDok as id_dok " +
                      " FROM ordersstavke " +
                      " WHERE SifParFil = '" + rw_mat["sifskl_kor"] + "'" +
                      " AND DokumentTip = '" + rw_mat["vrst_dok"] + "'";

MySqlDataAdapter sql_adapter = new MySqlDataAdapter(cmd_sql);
DataSet dt_dok = new DataSet("DOK_MAT_EXCHANGE");
sql_adapter.Fill(dt_dok);

if (dt_dok.Tables["DOK_MAT_EXCHANGE"].Rows.Count == 0)
{
   myQuery = " INSERT INTO ordersstavke (BrDok, DocumentTip, SifParFil) " +
             " VALUES ('" + rw_mat["brdok"] + "', '" +
                            rw_mat["vrst_dok"] + "', '" +
                            rw_mat["sifskl_kor"] + "')";
}
else
{
    UPDATE DATA
}

但是我在代码中有一个错误,错误在这里,如果(dt_dok.Tables["DOK_MAT_EXCHANGE"].Rows.Count == 0)

对象引用未设置为对象的实例。

问题是如果这份声明..。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-05-07 09:05:37

好的,谢谢各位,我是这样写的

代码语言:javascript
复制
if (ds_dok.Tables[0].Rows.Count <= 0)
                    {
                        myQuery = " INSERT INTO ordersstavke (BrDok, " +
                                  " SifParFil) " +
                                  " VALUES ('" + rw_mat["brdok"] + "', '" +
                                                 rw_mat["sifskl_kor"] + "')";
                    }
                    else if (ds_dok.Tables[0].Rows.Count >= 1)
                    {

                        myQuery = "UPDATE ordersstavke " +
                                  "SET BrDok = '" + rw_mat["brdok"] + "', " +
                                  "SifParFil = '" + rw_mat["sifskl_kor"] + "', " +
                                  "WHERE BrDok = " + ds_dok.Tables["ordersstavke"].Rows[0]["BrDok"].ToString() + "'";

                    }

但是在更新部分中有一个小问题: s_dok.Tables"ordersstavke".Rows.ToString(),这里给出了一个可爱的错误:对象引用没有设置为对象的实例。

也许MySQL上的更新是以不同的方式进行的,我在sql server上引用的例子中,更新的方式有所不同。

票数 0
EN

Stack Overflow用户

发布于 2012-05-04 14:06:42

DOK_MAT_EXCHANGE是DataSet的名称,而不是第一个表的名称。

你应该用

代码语言:javascript
复制
if (dt_dok.Tables[0].Rows.Count == 0) 

此外,我认为最好使用这样的语法来发现有多少记录是呈现的。

代码语言:javascript
复制
cmd_sql.CommandText = "SELECT COUNT(BrDok) as id_dok " +
                      " FROM ordersstavke " +                         
                      " WHERE SifParFil = ?p1 " +                         
                      " AND DokumentTip = ?p2";   
cmd_sql.Parameters.AddWithValue("?p1", rw_mat["sifskl_kor"] );
cmd_sql.Parameters.AddWithValue("?p2", rw_mat["vrst_dok"] );
int rowCount = (Int32)cmd_sql.ExecuteScalar();
票数 4
EN

Stack Overflow用户

发布于 2012-05-04 14:09:08

变化

代码语言:javascript
复制
DataSet dt_dok = new DataSet("DOK_MAT_EXCHANGE");

至

代码语言:javascript
复制
DataSet dt_dok = new DataSet("ordersstavke ");

和

代码语言:javascript
复制
if (dt_dok.Tables["DOK_MAT_EXCHANGE"].Rows.Count == 0)

至

代码语言:javascript
复制
if (dt_dok.Tables["ordersstavke "].Rows.Count == 0)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10450353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档