2010-11-30 3 views
2

Вот код:Тип ошибки преобразования данных NVARCHAR плавать

protected void Button11_Click(object sender, EventArgs e) 
    { 
      String usr = Membership.GetUser(false).ToString(); 
      int x, count = 0, avail_shares,num; 
      float t_c, c_p, c_t,ret,com,t_r,pr; 
      String comp = this.DropDownList4.SelectedValue.ToString(); 

      avail_shares = Convert.ToInt32(this.TextBox10.Text); 
      pr = float.Parse(this.TextBox15.Text); 
      t_c = float.Parse(this.TextBox14.Text); 
      c_p = float.Parse(this.TextBox12.Text); 
      c_t = float.Parse(this.TextBox131.Text); 
      ret = float.Parse(this.TextBox132.Text); 
      com = float.Parse(this.TextBox133.Text); 
      t_r = float.Parse(this.TextBox13.Text); 
      num = Convert.ToInt32(this.TextBox11.Text); 

      if (num > avail_shares) 
      { 
       this.Label23.Text = "You cannot sell more number of shares than what you actuall have"; 
      } 
      else 
      { 
       DbProviderFactory dbproviderfactory = DbProviderFactories.GetFactory("System.Data.SqlClient"); 
       using (DbConnection conn = dbproviderfactory.CreateConnection()) 
       { 
        string s = ConfigurationManager.ConnectionStrings["Project_FinanceConnectionString"].ConnectionString; 

        conn.ConnectionString = s; 

        conn.Open(); 


        DbCommand cmd = conn.CreateCommand(); 
        //DbCommand cmd1 = conn.CreateCommand(); 

        cmd.CommandText = "INSERT INTO sell_activity(username,company,avail_units,old_price,total_old_price,new_price,total_new_price,number,ret,commission,total_return,timestamp)VALUES(@U,@C,@A_U,@O_P,@T_O_P,@N_P,@T_N_P,@N,@R,@C,@T_R,@T)"; 

        //cmd1.CommandText = "SELECT EventID from EventsTable where EventName = ename";      


        SqlParameter U = new SqlParameter("@U", SqlDbType.NVarChar, 256); 
        SqlParameter C = new SqlParameter("@C", SqlDbType.NVarChar, 50); 
        SqlParameter A_U = new SqlParameter("@A_U", SqlDbType.Int); 
        SqlParameter O_P = new SqlParameter("@O_P", SqlDbType.Float); 
        SqlParameter T_O_P = new SqlParameter("@T_O_P", SqlDbType.Float); 
        SqlParameter N_P = new SqlParameter("@N_P", SqlDbType.Float); 
        SqlParameter T_N_P = new SqlParameter("@T_N_P", SqlDbType.Float); 
        SqlParameter N = new SqlParameter("@N", SqlDbType.Int); 
        SqlParameter R = new SqlParameter("@R", SqlDbType.Float); 
        SqlParameter Commi = new SqlParameter("@Commi", SqlDbType.Float); 
        SqlParameter T_R = new SqlParameter("@T_R", SqlDbType.Float); 
        SqlParameter T = new SqlParameter("@T", SqlDbType.DateTime); 


        U.Value = usr; 
        C.Value = comp; 
        A_U.Value = avail_shares; 
        O_P = pr; 
        T_O_P = t_c; 
        N_P=c_p; 
        T_N_P = c_t; 
        N = num; 
        R = ret; 
        Commi = com; 
        T_R = t_r; 
        T = DateTime.Now; 

        cmd.Parameters.Add(@U); 
        cmd.Parameters.Add(@C); 
        cmd.Parameters.Add(@A_U); 
        cmd.Parameters.Add(@O_P); 
        cmd.Parameters.Add(@T_O_P); 
        cmd.Parameters.Add(@N_P); 
        cmd.Parameters.Add(@T_N_P); 
        cmd.Parameters.Add(@N); 
        cmd.Parameters.Add(@R); 
        cmd.Parameters.Add(@Commi); 
        cmd.Parameters.Add(@T_R); 
        cmd.Parameters.Add(@T); 

        [b]DbDataReader reader = cmd.ExecuteReader();[/b] 
        try 
        { 
         if (reader.HasRows) 
         { 

          while (reader.Read()) 
          { 

          } 
         } 
        } 
        catch (Exception err) 
        { 
         Response.Write("Problem in retriving the latest values..Please try again."); 
         Response.Write(err); 
        } 
        reader.Close(); 
       } 

      } 
    } 

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

System.Data.SqlClient.SqlException: [b]Error converting data type nvarchar to float. [/b] at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) at System.Data.SqlClient.SqlDataReader.ConsumeMetaData() at System.Data.SqlClient.SqlDataReader.get_MetaData() at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) at System.Data.Common.DbCommand.ExecuteReader() at portfolio.Button11_Click(Object sender, EventArgs e) in e:\Study\LAST SEM\Project\Backup\Finance1\portfolio.aspx.cs:line 1187

Любая идея, ребята ..

Я также пытался отлаживать использование часов, и каждая переменная получает значение, которое он получает. Поэтому я не получаю причину проблемы :( pl help me out

+0

'this.TextBox133'? В самом деле? –

+0

Есть ли причина, по которой вы используете DbConnection/DbCommand вместо SqlConnection/SqlCommand? Кроме того, более вероятно, что ваша таблица sell_activity может иметь тип данных, который отличается от того, что у вас есть в параметрах оператора INSERT/SQL. Посмотрите на sell_activity и убедитесь, что каждый столбец, который должен быть типа float, является float. – bitxwise

ответ

1

Метод ExecuteReader обычно используется для получения результатов запроса (SELECT) в качестве объекта DataReader. Но я вижу, что вы пытаетесь выполнить вставку. Я предлагаю вместо этого использовать SqlCommand.ExecuteNonQuery и посмотреть, работает ли он.

Более точно заменить

DbDataReader reader = cmd.ExecuteReader(); 

if (reader.HasRows) 
{ 
    while (reader.Read()) 
    { 
    } 
} 

с

cmd.ExecuteNonQuery(); 

Также проверьте, если какой-либо из SqlParameters, создаваемых с помощью карт типа SqlDbType.NVarChar в столбец типа поплавка в базе данных. Используйте соответствующие типы для SqlParameters.

Смежные вопросы