2010-11-24 2 views
0

У меня есть код, в которомОшибка в asp.net C# код (MySQL соединения с базой данных)

  1. я связать DropDownList к базе данных и позже,

  2. on button click я подключиться к чтобы получить некоторую ценность в метке .

Моя первая часть работает нормально, но когда я пытаюсь сделать вторую часть я получаю сообщение об ошибке, как

в System.Data.SqlClient.SqlConnection.OnError (SqlException исключение, Boolean breakConnection) в System.Data.SqlClient.SqlInternalConnection.OnError (исключение SqlException, Boolean breakConnection) в System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning (TdsParserStateObject stateObj) в System.Data.SqlClient.TdsParser.Run (RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream , BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) в System.Data.SqlClient.SqlDataReader.ConsumeMetaD ata() в System.Data.SqlClient.SqlDataReader.get_MetaData() в System.Data.SqlClient.SqlCommand.FinishExecuteReader (SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) в System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) в System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, метод String, результат DbAsyncResult) в System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior , Boolean returnStream, метод String) в System.Data.SqlClient.SqlCommand.ExecuteReader (поведение CommandBehavior, метод String) в System.Data.SqlClient.SqlCommand.ExecuteReader() в _Default.Button1_Click (отправитель объекта, EventArgs e) в c: \ Documents and Settings \ a \ Мои документы \ Visual Studio 2008 \ WebSites \ toolbar1 \ Default.aspx.cs: строка 56

Мой код:

using System; 
using System.Configuration; 
using System.Data; 
using System.Linq; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.HtmlControls; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Xml.Linq; 

using System.Data.SqlClient; 

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      try 
      { 
       SqlConnection myConn = new SqlConnection("Server=localhost;Database=testcase;Integrated Security=SSPI"); 
       SqlCommand myCmd = new SqlCommand("select skey,casecode from casetype", myConn); 
       myConn.Open(); 
       SqlDataReader myReader = myCmd.ExecuteReader(); 

       //Set up the data binding. 
       DropDownList3.DataSource = myReader; 
       DropDownList3.DataTextField = "skey"; 
       DropDownList3.DataValueField = "casecode"; 
       DropDownList3.DataBind(); 

       //Close the connection. 
       //myConn.Close(); 
       //myReader.Close(); 

       //Add the item at the first position. 
       DropDownList3.Items.Insert(0, "<-- Select -->"); 

      } 
      catch (Exception ex) 
      { 
       Response.Write(ex.StackTrace); 
      } 
     } 
    } 

    protected void Button1_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      SqlConnection myConn1 = new SqlConnection("Server=localhost;Database=testcase;Integrated Security=SSPI"); 
      SqlCommand myCmd1 = new SqlCommand("select casename,skey from casetype where skey=?", myConn1); 
      myConn1.Open(); 
      SqlDataReader myReader1 = myCmd1.ExecuteReader(); 
      String type = DropDownList3.SelectedItem.Text; 
      myCmd1.Parameters.AddWithValue("?", type); 
     } 
     catch (Exception exw) 
     { 
      Response.Write(exw.StackTrace); 
     } 

    } 
} 

Пожалуйста, помогите мне решить мою проблему.

ответ

1

Вы говорите, что это база данных MySQL .. и строка соединения, что вы дали это "Server=localhost;Database=testcase;Integrated Security=SSPI"

Насколько я знаю .. строка соединения MySQL имеет порт 3306 и какой-либо другой формат.

Для получения подробных строк подключения для различных баз данных смотрите http://www.connectionstrings.com/.

Кроме того, я полагаю, что вы уверены, что сервер MySQL работает на вашем компьютере - обычно это mysqld.

+0

Спасибо, ты сказал, что это правильно, как с той же строкой подключения моя первая часть работает нормально? – Ishan 2010-11-24 06:45:58

+0

Что вы первый? Ошибка находится на линии 56 (как указано вашей трассировкой стека). и я думаю, что это указывает на conn.Open ... – Sekhar 2010-11-24 06:46:37

+0

Я отношу свою первую часть как, соединяя раскрывающийся список с базой данных .. это работает абсолютно нормально. – Ishan 2010-11-24 06:53:22

0

Я думаю, это потому, что вы выполняете чтение перед прикреплением paramater к объекту команды. Попробуйте это

protected void Button1_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      SqlConnection myConn1 = new SqlConnection("Server=localhost;Database=testcase;Integrated Security=SSPI"); 
      SqlCommand myCmd1 = new SqlCommand("select casename,skey from casetype where skey=?", myConn1); 
      myConn1.Open(); 
String type = DropDownList3.SelectedItem.Text; 
      myCmd1.Parameters.AddWithValue("?", type); 
      SqlDataReader myReader1 = myCmd1.ExecuteReader(); 

     } 
     catch (Exception exw) 
     { 
      Response.Write(exw.StackTrace); 
     } 

    } 
0

Вы выполняете перед добавлением стоимости.

--EDIT--

После обновленной вопрос.

Try, следующее:

string type = DropDownList3.Items[DropDownList3.SelectedIndex].Text; 
string commandText = "select casename,skey from casetype where [email protected];"; 
using (SqlConnection connection = new SqlConnection("Server=localhost;Database=testcase;Integrated Security=SSPI")) 
{ 
    SqlCommand command = new SqlCommand(commandText, connection); 
    command.Parameters.Add("@key", SqlDbType.Text); //Same as System.String 
    command.Parameters["@key"].Value = type ; //Value from your text box! 
    //command.Parameters.AddWithValue("@key", type); 

    try 
    { 
     connection.Open(); 
     Int32 rowsAffected = command.ExecuteNonQuery(); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.Message); 
    } 

} 
0

Похоже, MySql не нравится "SSPI" или "ССПИ". Я пробовал «правда», и он работает.

<add name="ConnStr" providerName="MySql.Data.MySqlClient" 
    connectionString="server=localhost;port=3306;database=myDb;Integrated Security=true;"/> 
Смежные вопросы