我在执行非查询 mysql.dll 期间遇到致命错误,并且空文件路径不合法

Posted

技术标签:

【中文标题】我在执行非查询 mysql.dll 期间遇到致命错误,并且空文件路径不合法【英文标题】:Im getting an fatal error during executenonquery mysql.dll and empty file path is not legal 【发布时间】:2018-08-19 00:18:22 【问题描述】:

您好,我正在尝试将所有数据保存在我的数据库中,包括图像。 我的图像的数据类型是 longblob 我的代码做错了吗?对不起,我只是一个初学者,希望有人能帮助我,谢谢。

try 
            string myConnection = "datasource=localhost; port=3306; username=root;password=admin; database=dbstudents;";
            mysqlConnection myConn = new MySqlConnection(myConnection);
            //Images Conversion : Datatype in my database is LONGBLOB
            byte[] img = null;
            FileStream fs = new FileStream(imgLoc, FileMode.Open, FileAccess.Read);
            BinaryReader br = new BinaryReader(fs);
            img = br.ReadBytes((int)fs.Length);


            // this is a sample query for update statement and update 
            string Query = "UPDATE tblstudent RIGHT JOIN tbltransact  ON tblstudent.StudentID = tbltransact.EnrolleeID SET FirstName=@firstName , LastName=@lastName , MiddleName=@middleName ,ContactNo=@contactNo ,Address=@address ,Age=@age ,Guardian=@guardian,studentPic=@studentPic,PendingBalance=@pendingBalance, WHERE StudentID=@studentID";
            MySqlCommand cin = new MySqlCommand(Query, myConn);
            myConn.Open();
            if (cin.ExecuteNonQuery() == 1)
            
                cin.Parameters.AddWithValue("@studentID", int.Parse(search.Text));
                cin.Parameters.AddWithValue("@firstName", firstname.Text);
                cin.Parameters.AddWithValue("@lastName", lastname.Text);
                cin.Parameters.AddWithValue("@middleName", middlename.Text);
                cin.Parameters.AddWithValue("@contactNo", ContactNum.Text);
                cin.Parameters.AddWithValue("@address", address.Text);
                cin.Parameters.AddWithValue("@age", int.Parse(age.Text));
                cin.Parameters.AddWithValue("@guardian", guardian.Text);
                cin.Parameters.AddWithValue("@studentPic", img );
                cin.Parameters.AddWithValue("@pendingBalance", int.Parse(Balance.Text));
                myConn.Close();
            
        catch(Exception ex)
        
            MessageBox.Show(ex.Message);
        

这就是我所做的一切,这也是我的数据库

【问题讨论】:

请原谅我编码不好,我也一直在检索图像 longblob 时遇到麻烦,如果有人可以提供帮助,那将是一个很大的帮助 我刚试过我的原始代码可以工作,但它太复杂了 请在问题中包含确切的错误及其发生位置 确保c#中的字段名称与数据库字段名称(包括小写和大写字母)完全匹配。 @StephenKennedy 它在标题中,它出现在我的参数执行非查询中 【参考方案1】:

您在执行命令后添加参数。那永远行不通。在您拨打ExecuteNonQuery()时,尚未填写任何参数。

您还打开了一个文件流。使用File.ReadAllBytes(path) 避免必须手动处理流以读取完整文件的内容。

try

    String myConnection = "datasource=localhost; port=3306; username=root;password=admin; database=dbstudents;";
    //Images Conversion : Datatype in my database is LONGBLOB
    Byte[] img = File.ReadAllbytes(imgLoc);

    // this is a sample query for update statement and update 
    String Query = "UPDATE tblstudent RIGHT JOIN tbltransact  ON tblstudent.StudentID = tbltransact.EnrolleeID SET FirstName=@firstName , LastName=@lastName , MiddleName=@middleName ,ContactNo=@contactNo ,Address=@address ,Age=@age ,Guardian=@guardian,studentPic=@studentPic,PendingBalance=@pendingBalance, WHERE StudentID=@studentID";

    MySqlCommand cin = new MySqlCommand(Query, myConn);
    using (MySqlConnection myConn = new MySqlConnection(myConnection))
    
        myConn.Open();
        cin.Parameters.AddWithValue("@studentID", Int32.Parse(search.Text));
        cin.Parameters.AddWithValue("@firstName", firstname.Text);
        cin.Parameters.AddWithValue("@lastName", lastname.Text);
        cin.Parameters.AddWithValue("@middleName", middlename.Text);
        cin.Parameters.AddWithValue("@contactNo", ContactNum.Text);
        cin.Parameters.AddWithValue("@address", address.Text);
        cin.Parameters.AddWithValue("@age", Int32.Parse(age.Text));
        cin.Parameters.AddWithValue("@guardian", guardian.Text);
        cin.Parameters.AddWithValue("@studentPic", img );
        cin.Parameters.AddWithValue("@pendingBalance", Int32.Parse(Balance.Text));
        if (cin.ExecuteNonQuery() == 0)
        
            // Handle query failure here
            MessageBox.Show(String.Format("No patient found to update for ID 0", search.Text));
        
    

catch(Exception ex)

    MessageBox.Show(ex.Message);

【讨论】:

以上是关于我在执行非查询 mysql.dll 期间遇到致命错误,并且空文件路径不合法的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 异常 - 数据读取期间遇到致命错误

使用 Google BigQuery 执行查询期间超出资源

information_schema 查询期间 MySQL 致命错误(软件导致连接中止)

致命错误:超过 30 秒的最大执行时间 [重复]

PHP error_reporting() 错误控制函数功能详解

PHP error_reporting() 错误控制函数功能详解