当我甚至没有尝试将其转换为int时,C#无法将字符串转换为int错误

时间:2017-03-20 23:24:11

标签: c# sql-server sql-server-2012

你好,有人可以帮帮我吗?当我试图从我的SQL Server数据库表上的表中获取字符串值时,它表示我无法将字符串转换为int,但我不想将值转换为int。因为表中的值是“Admin”和“General User”。

顺便说一下我使用sql server 2014

我用来捕获字符串的变量是cap,我将其声明为字符串。

当我写代码时。

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数据库有相同的代码,它可以工作。现在我想用microsoft sql server做到这一点。所以我从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();
    }
}
}

1 个答案:

答案 0 :(得分:4)

问题在于这一行:

cap = leer_exe.GetString("Admin");

GetString将int32作为参数。

如果您想按名称访问列,则应使用Item代替:

cap = leer_exe["Admin"] as string;

或者,如果您知道哪个列"管理员"是,你可以用它的位置索引替换它。如果它是结果集中的第4列,则您使用索引3(因为它的基数为0):

cap = leer_exe.GetString(3);