2017-03-20 60 views
0

你好可以有人請幫助我嗎?當我試圖從我的sql服務器數據庫表上的表中獲取字符串值它說我不能將字符串轉換爲int,但我不想將值轉換爲int。因爲表中的值是「Admin」和「General User」。C#無法將字符串轉換爲int錯誤,當我甚至沒有嘗試將其轉換爲int

由我使用的SQL Server 2014

,我使用捕捉到的字符串變量的方法是帽和我宣佈它作爲一個字符串。

當我寫代碼。

conn.Open(); 

     string query_inicio = "select * from usuarios where USU_Usuario = '" + txtusuario.Text + "' AND USU_Contra ='" + txtcontra.Text + "'"; 
     SqlCommand exe_query_inicio = new SqlCommand(query_inicio, conn); 

     SqlDataReader leer_exe; 


     try 
     { 



      leer_exe = exe_query_inicio.ExecuteReader(); 

      if (leer_exe.Read()) 
      { 
       cap = leer_exe.GetString("Admin"); 

       MessageBox.Show("CONECTADO"); 
       if (cap.Equals("Admin")) 
       { 
        Reporte_Detallado IB = new Reporte_Detallado(); 
        IB.Show(this); 

        this.Hide(); 
       } 
      } 
      else if (leer_exe.Read() == false) 
      { 

       MessageBox.Show("Inicio Fallido, Verifique Conexion"); 

     } 

它強調cap = leer_exe.GetString("Admin");並說我不能將字符串轉換爲int。

我有相同的代碼使用MySQL數據庫,它的工作原理。現在我正在嘗試使用微軟sql服務器來做到這一點。所以我只改變了mysql版本,而不是mysqlconection和那些數據庫代碼行到sqlconnection和其他變化。

這是我的完整代碼。我希望有一個人可以幫助我。

順便說一下,我在c#編碼。

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using System.Data.SqlClient; 

namespace ClimateReports 
{ 
public partial class Login : Form 
{ 
    SqlConnection conn = ConexionBD.ObtenerConexion(); 
    string cap; 

    public Login() 
    { 
     InitializeComponent(); 
    } 

    private void btncancelar_Click(object sender, EventArgs e) 
    { 
     this.Dispose(); 
    } 

    private void btniniciar_Click(object sender, EventArgs e) 
    { 
     conn.Open(); 
     string query_inicio = "select * from usuarios where USU_Usuario = '" + txtusuario.Text + "' AND USU_Contra ='" + txtcontra.Text + "'"; 
     SqlCommand exe_query_inicio = new SqlCommand(query_inicio, conn); 
     SqlDataReader leer_exe; 
     try 
     { 
      leer_exe = exe_query_inicio.ExecuteReader();    
      if (leer_exe.Read()) 
      { 
       cap = leer_exe.GetSqlString("Admin"); 

       MessageBox.Show("CONECTADO"); 
       if (cap.Equals("Admin")) 
       { 
        Reporte_Detallado IB = new Reporte_Detallado(); 
        IB.Show(this); 

        this.Hide(); 
       } 
      } 
      else if (leer_exe.Read() == false) 
      { 

       MessageBox.Show("Inicio Fallido, Verifique Conexion"); 
     } 

     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
     conn.Close(); 
    } 
} 
} 
+0

ARGH!使用參數。切勿盲目地將用戶數據添加到查詢字符串中。你不知道[Bobby Tables](https://xkcd.com/327/)嗎? – itsme86

+0

不是真的,但我會研究它。在大學裏,一個在墨西哥去的人,他們沒有教過很多東西。但我會查找它。和關於我知道的參數,但我有點懶惰lol – VesuvianMetal

回答

4

問題是這樣的線:

cap = leer_exe.GetString("Admin"); 

GetString需要int32類型作爲其參數。

如果你想通過它的名稱來訪問列,你應該使用Item代替:

cap = leer_exe["Admin"] as string; 

或者,如果你知道什麼樣的列「管理」是,你可以用它的位置索引替換它。如果它是結果集中的第4列,則使用索引3(因爲它是基數0):

cap = leer_exe.GetString(3); 
+0

fisrt使用cap = leer_exe [「Admin」]作爲字符串;並沒有工作,但上限= leer_exe.GetString(3);完美地工作。只有對我來說這是6而不是3。非常感謝Jonh。我真的很喜歡它。 – VesuvianMetal