【问题标题】:Insertion of data in mysql with C#使用 C# 在 mysql 中插入数据
【发布时间】:2012-02-19 02:30:23
【问题描述】:

我正在使用 Visual Studio 2010 c# 在 mysql 数据库中插入大量二进制数据,但插入时出现以下错误:

Exception is+ 连接已被禁用。StackTrace= at System.Data.Odbc.OdbcConnection.ConnectionIsAlive(异常 内部异常)在 System.Data.Odbc.OdbcConnection.HandleErrorNoThrow(OdbcHandle hrHandle,RetCode 重新编码)在 System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode) 在 System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior 行为,字符串方法,布尔需要读取器,对象[] 方法参数, SQL_API odbcApiMethod) 在 System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior 行为,字符串方法,布尔需要读取器)在 System.Data.Odbc.OdbcCommand.ExecuteNonQuery() 在 UploadFile.btnFileUpload_Click1(Object sender, EventArgs e) in c:\inetpub\wwwroot\computingClient\UploadFile.aspx.cs:133 行

Mysql 数据类型为 LONGBLOB 这是我的代码:

string connStr = ConfigurationManager.AppSettings["connectionString"];
OdbcConnection conn = new OdbcConnection(connStr);
conn.Open();
OdbcCommand cmd = conn.CreateCommand();
string sql = "insert into uploadeddata values(?,?,?,?,?)";
//cmd.CommandText = "insert into uploadeddata values(0 ,'" + fileName + "'," + id +",'"+strTokens +"')";
cmd.CommandText = sql;
cmd.Parameters.AddWithValue("@id", 0);
cmd.Parameters.AddWithValue("@filename", fileName);
cmd.Parameters.AddWithValue("@ServerKey", id);
cmd.Parameters.AddWithValue("@Token", strTokens);
cmd.Parameters.AddWithValue("@userId", Session["LoggedInUserId"]);
//Logger.writeLog(@"D:\Cloud Computing\CloudClient\Log\Log.txt","id:"+id+",filename:"+fileName+",userid:"+Session["LoggedInUserId"]+",strtokens:"+strTokens);
cmd.ExecuteNonQuery();
conn.Close();
progressCounter = 100;
//progress.SecondaryValue = progressCounter;
//progress.SecondaryPercent = progressCounter;
string script = "<script>alert('File uploaded successfully');</script>";
ClientScript.RegisterClientScriptBlock(this.GetType(), script, script);

【问题讨论】:

  • 你在哪里插入二进制数据?
  • 什么版本的MySql,MySql 5及以上支持names参数,不需要像SqlServer一样在前面加上“@”符号。我也建议你看看使用Native .Net连接器不是 ODBC,因为它本质上更快并且提供更好的 TypeConversion 语义。dev.mysql.com/downloads/connector/net
  • @Lloyd 非常好的评论。值得回答!

标签: c# mysql odbc blob


【解决方案1】:

由于您尝试插入大量数据,您可能应该在 MySQL 配置文件中增加 max_allowed_packet(然后重新启动 MySQL)。默认情况下,该值通常很小,以防止向 mysql 发送无效数据包,但如果您希望像您一样进行大量插入,则可以增加它,但请注意协议限制为 1GB(因此,没有比这更大的数据包)。 Here你可以找到更多信息。

另外,正如@Lloyd 指出的那样,您应该使用 .NET 连接器而不是 odbc 驱动程序。在这种情况下,您的代码应如下所示:

using(var connection = new MySqlConnection(ConfigurationManager.AppSettings["connectionString"]))
{
    connection.Open();
    using(var command = connection.CreateCommand())
    {
        command.CommandText = "INSERT INTO uploadeddata VALUES (@id, @filename, @serverKey, @token, @userId)";
        command.Parameters.Add(new MySqlParameter("id", 0));
        command.Parameters.Add(new MySqlParameter("filename", fileName));
        command.Parameters.Add(new MySqlParameter("serverKey", id));
        command.Parameters.Add(new MySqlParameter("token", strTokens));
        command.Parameters.Add(new MySqlParameter("userId", Session["LoggedInUserId"]));

        command.ExecuteNonQuery();
    }
}

【讨论】:

  • +1 我忘记了包大小,这是 blob 的常见问题。
猜你喜欢
  • 2014-11-04
  • 1970-01-01
  • 1970-01-01
  • 2021-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-07
  • 1970-01-01
相关资源
最近更新 更多