【问题标题】:C# Insert and Update content to DataGridView do not work !C# 向 DataGridView 插入和更新内容不起作用!
【发布时间】:2011-06-07 12:15:31
【问题描述】:

我在这里遇到了一个非常麻烦的问题,查询似乎显然是正确的,但它没有返回任何数据行...

基本上问题是在插入之后,我进行选择以获取变量的自动增量编号(NAlbum)(我正在使用 C#),这是困扰我的一段代码

            //Associar ID de Artista
            ClassBD.DBMyReader(
                "SELECT NArtista " +
                "FROM Artistas " +
                "WHERE (Nome = '" + CBBoxAddArtista.Text + "')");
            ClassBD.myReader.Read();
            temptabelas[0] = ClassBD.myReader.GetInt32(0);

            //Associar ID da Editora
            ClassBD.DBMyReader(
                "SELECT NEditora " +
                "FROM Editora " +
                "WHERE (Nome = '" + CBBoxAddEditora.Text + "')");
            ClassBD.myReader.Read();
            temptabelas[1] = ClassBD.myReader.GetInt32(0);

            //Associar ID da Media
            ClassBD.DBMyReader(
                "SELECT NMedia " +
                "FROM Media " +
                "WHERE (Nome = '" + CBBoxAddMedia.Text + "')");
            ClassBD.myReader.Read();
            temptabelas[2] = ClassBD.myReader.GetInt32(0);

            //Associar ID do Genero
            ClassBD.DBMyReader(
                "SELECT NGenero " +
                "FROM Genero_de_Musica " +
                "WHERE (Nome = '" + CBBoxAddGenero.Text + "')");
            ClassBD.myReader.Read();
            temptabelas[3] = ClassBD.myReader.GetInt32(0);

            ClassBD.DBMyInsertCommand("INSERT INTO Albuns " +
                "(NArtista, NEditora, NGeneroDeMusica, NMedia, Nome, [Ano de Edição])" +
                "VALUES (" + temptabelas[0] + "," + temptabelas[1] + "," + temptabelas[2] + "," + temptabelas[3] + ",'" + TxtAddMusicaAlbum.Text + "'," + int.Parse(TxtAddAnoEdicao.Text) + ")");

            ClassBD.DBMyReader("SELECT MAX(NAlbum) AS Actual " +
                               "FROM Albuns");
            tempnalbum = ClassBD.myReader.GetInt32(0);

            musicasBindingSource.Filter = "NAlbum = " + tempnalbum;

提前致谢, 路易斯·达科斯塔

【问题讨论】:

  • 使用参数化查询。
  • 你有 5 次选择和 1 次插入,那一次是不返回任何数据行的?
  • 您好,1)“使用参数化查询”? - 你能详细说明一下吗,我对 SQL 不是很熟悉......:S...... 2)不返回任何数据行的是这个:ClassBD.DBMyReader(“SELECT MAX(NAlbum)AS Actual” + "来自阿尔本斯");

标签: c# mysql datagridview rows


【解决方案1】:

第一。您需要参数化查询以获得更简洁的语法。

例子:

string CommandText = "select NArista from Artista where Nome=@Nome";
cmd = new SqlCommand(CommandText);
cmd.Connection = con;
cmd.Parameters.AddWithValue("@Nome",CBBoxAddArtista.Text);  
rdr = cmd.ExecuteReader();  
while(rdr.Read())
{
 temptabelas[0] = rdr["NAtista"].ToString()                      
}

在将结果加载到 Data gridview 之后,循环所有值 然后使用您的插入语句。

例子:

foreach (DataGridViewRow dr in Datagridview1.Rows)
{
//Do your Code
"INSERT INTO Albuns " +
 "(NArtista, NEditora, NGeneroDeMusica, NMedia, Nome, [Ano de Edição])" +
"VALUES (@1,@2,@3,@4,@5,@6)";
// Add parameter
cmd.Parameters.AddWithValue("@1",(string) dr.Cells["Natista"].Value.ToString()); 
.
.
.
.
cmd.Parameters.AddWithValue("@6",int.Parse(TxtAddAnoEdicao.Text)


cmd.ExecuteNonQuery();

 }

【讨论】:

    【解决方案2】:

    大家好,

    ClassBD.DBMyInsertCommand("INSERT INTO Albuns " +
                    "(NArtista, NEditora, NGeneroDeMusica, NMedia, Nome, [Ano de Edição]) " +
                    "VALUES (" + temptabelas[0] + "," + temptabelas[1] + "," + temptabelas[2] + "," + temptabelas[3] + ",'" + TxtAddMusicaAlbum.Text + "'," + int.Parse(TxtAddAnoEdicao.Text) + ")");
    
                OleDbConnection connection = new OleDbConnection(ClassBD.MyConnectionString);
                connection.Open();
                OleDbCommand MyCommand = new OleDbCommand("SELECT NAlbum FROM Albuns WHERE (Nome = @Nome)", connection);
                MyCommand.Parameters.AddWithValue("@Nome", TxtAddMusicaAlbum.Text);
                OleDbDataReader myReader = MyCommand.ExecuteReader(CommandBehavior.CloseConnection);
                ClassBD.tempnalbum = myReader.GetInt32 ;
    

    “嗨,我昨天问了这个问题,你让我参数化查询,所以我做了......但是,它仍然没有行......帮助?” "(插入是正确的,我已经检查了它的条目)

    【讨论】:

    • 您有一个插入命令,但您甚至不使用执行非查询来执行它。 command("INSERT") command.executenonquery();
    【解决方案3】:
    Private Sub BoundLoadButton_Click(ByVal sender As System.Object, 
                                      ByVal e As System.EventArgs) 
                                      Handles BoundLoadButton.Click
         swatch.Reset()
         swatch.Start()
         Cursor = Cursors.WaitCursor
         Try
            Using BoundObject As New UnboundClass(mMySQLConnectionString)
               Call BoundObject.BoundDataLoading(UnboundDataGridView, _
                                                 RecordCountTextBox, _
                                                 mErrorMsgString)
               If Not IsNothing(mErrorMsgString) Then
                  Cursor = Cursors.Default
                  MessageBox.Show(mErrorMsgString, _
                                  Me.Text, _
                                  MessageBoxButtons.OK, _
                                  MessageBoxIcon.Error)
               End If
            End Using
         Catch exError As Exception
            MessageBox.Show(exError.Message, _
                            Me.Text, _
                            MessageBoxButtons.OK, _
                            MessageBoxIcon.Error)
         End Try
         Cursor = Cursors.Default
         swatch.Stop()
         mTimeDouble = swatch.ElapsedMilliseconds * 0.001
         BoundTimeTextBox.Text = mTimeDouble.ToString
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-13
      • 2013-09-07
      • 1970-01-01
      相关资源
      最近更新 更多