
Visual Studioのバージョンは、Microsoft Visual Studio Community 2017 Version 15.8.4です。
下記のコードでは、SQL ServerのUpdateが出来ませんでした。
結局は、SQL ServerにあるArticlesテーブルのUpdateTimeカラムの値をすべての行ごとnullにしたいのです。
最初のコードブロックの部分内の処理が出来ずに困っています。更新の仕方に間違いがありそうです。
どうしたらよいか教えて下さい。よろしくお願いします。
C#
1 public void DeleteUpdateTime(DataTable table) 2 { 3 using (SqlConnection conn = new SqlConnection(GetConnectionString(databasename))) 4 using (da = GetDataAdapter(conn, table.TableName)) 5 { 6 conn.Open(); 7 cmd = new SqlCommand(SelectTable(table.TableName)); 8 da = new SqlDataAdapter { SelectCommand = cmd }; 9 10 cmd = new SqlCommand("UPDATE Articles SET UpdateTime = null;", conn); 11 12 da.UpdateCommand = cmd; 13 14 da.Update(table); 15 } 16 } 17 18// 下記は、参考程度にしてください。問題は上のコードです。↑ 19 20 public DataTable GetTheArticle(SqlConnection conn, DataSet ds) 21 { 22// ID, Name, InputTime, UpdateTimeのカラムを持ったArticlesテーブル(StrArticles)のUpdateTimeをnullにしようとしてます。 23 24 string sSelect = "SELECT ID, Name, InputTime, UpdateTime FROM Articles ORDER BY ID;"; 25 26 using (conn = new SqlConnection(GetConnectionString(dataBaseName))) 27 { 28 cmd = new SqlCommand(sSelect, conn); 29 30 SqlDataAdapter da = new SqlDataAdapter(cmd); 31 DataTable dTbl = new DataTable(StrArticles); 32 33 da.Fill(dTbl); 34 dTbl.PrimaryKey = new DataColumn[] { dTbl.Columns["ID"] }; 35 return dTbl; 36 } 37 } 38 39 private string GetConnectionString(string dataBaseName) 40 { 41 string sConn = ""; 42 switch (authenticName) 43 { 44 case WinAuthentic: 45 sConn = "Data Source=" + serverName + ";Database=" + dataBaseName + ";Integrated Security=true;"; 46 break; 47 case SqlAuthentic: 48 sConn = "Persist Security Info=False;User ID=" + loginName + ";Password=" + loginPass + 49 ";Initial Catalog=" + dataBaseName + ";Server=" + serverName + ";"; 50 break; 51 } 52 return sConn; 53 } 54
// さらに下記のように、DataSetを追加して、また、要らないと思われるコードを削ってみましたが、やはりだめでした。
C#
1 public void DeleteUpdateTime(DataTable table) 2 { 3// 今度は、こうやって非接続型での処理を使用との意向を明確にするため、DataSetを明示してみましたが、やはりだめでした。 4 DataSet ds = new DataSet(); 5 string sTable = table.TableName; 6 using (SqlConnection conn = new SqlConnection(GetConnectionString(databasename))) 7 using (SqlDataAdapter da = new SqlDataAdapter(SelectTable(sTable), conn)) 8 { 9 // conn.Open(); 10 da.Fill(ds, sTable); 11 12 cmd = new SqlCommand("UPDATE Articles SET UpdateTime = null;", conn); 13 14 da.UpdateCommand = cmd; 15 16 da.Update(table); 17 } 18 } 19// なお、tableには、ArticlesというTableのデータがすべて格納されていますので、接続状態などは問題なさそうです。
C#
1 2 public void DeleteUpdateTime(DataTable table) 3 { 4 string sTable = table.TableName; 5 using (SqlConnection conn = new SqlConnection(GetConnectionString(StrNote))) 6 using (SqlDataAdapter da = new SqlDataAdapter(SelectTable(sTable), conn)) 7 { 8 cmd = new SqlCommand("UPDATE Articles SET UpdateTime = null;", conn); 9 10 da.UpdateCommand = cmd; 11 12// Forループを使わずに、あっさりとすべての行のUpdateTime列をnullにできるともっといいけど。 13 for (int i = 0; i < table.Rows.Count - 1; i++) 14 { 15 articleTable.Rows[i]["UpdateTime"] = DBNull.Value; 16 } 17 18 da.Update(table); 19 } 20 }

どこがどう期待と違う結果になるのか詳しく書いてください。エラーメッセージが出ているならそれをコピペして質問欄に書いてください。
まず、エラーにはなりません。最後の da.Update(table); のところも、処理出来てよさそうなのですが、データベースは、変わらぬままです。で、どうしたらよいのだろう、となりました。

> DataSetを追加して、また、要らないと思われるコードを削って ← 回答に書いたこと、全然理解してないですよ。ここでは改行もできないので回答欄のコメントに書きます。
DataSet を使ってそこへの変更をデータベースに反映するのが非接続型と理解しましたが、おかしいかな?DataReaderは使っていないわけだし。なんだろ?

話が通じてませんよ。DataSet は関係ない。回答欄のコメントを見てください。

回答2件
あなたの回答
tips
プレビュー