Вставка данных в MySQL с C # - PullRequest
0 голосов
/ 18 февраля 2012

Я использую Visual Studio 2010 c # для вставки огромного количества двоичных данных в базу данных mysql, но при вставке я получаю следующую ошибку:

Исключение составляет + Соединение было отключено.StackTrace =в System.Data.Odbc.OdbcConnection.ConnectionIsAlive (исключение innerException) в System.Data.Odbc.OdbcConnection.HandleErrorNoThrow (OdbcHandle hrHandle, RetCode retcode) в System.Data.Odbc.OdbHecleHecleHecleHecleNHRecLEHOCK.Data.Odbc.OdbcCommand.ExecuteReaderObject (поведение CommandBehavior, метод String, логическое значение NeedReader, Object [] methodArguments, SQL_API odbcApiMethod) в System.Data.Odbc.OdbcCommand.ExecuteReaderObject, метод поведения StringReader (в объекте)СвойствоВот мой код:

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);

1 Ответ

2 голосов
/ 18 февраля 2012

Поскольку вы пытаетесь вставить огромное количество данных, вам, вероятно, следует увеличить max_allowed_packet в вашем файле конфигурации MySQL (и перезапустить MySQL, впоследствии).Это значение обычно по умолчанию мало, чтобы предотвратить отправку недопустимых пакетов в mysql, но вы можете увеличить его, если ожидаете таких больших вставок, как вы, но учтите, что ограничение протокола составляет 1 ГБ (поэтому, пакет не больше этого). Здесь вы можете найти больше информации.

Также, как указывал @Lloyd, вы должны использовать .NET Connector вместо драйвера 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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...