C# SQL值转换为整数

C# SQL值转换为整数,c#,asp.net,sql-server,C#,Asp.net,Sql Server,我试图比较每次用户登录时更新的数据库中的值。当我使用给定的代码执行查询时,什么都不会发生。但是,如果我给它一个值say(where-trument>10),它就工作了,我哪里出错了 private void User_Tick(object sender, EventArgs e) { SqlConnection con13 = new SqlConnection("Data Source = *** ") SqlDataAdapter SDA2 = new SqlDataAd

我试图比较每次用户登录时更新的数据库中的值。当我使用给定的代码执行查询时,什么都不会发生。但是,如果我给它一个值say(where-trument>10),它就工作了,我哪里出错了

private void User_Tick(object sender, EventArgs e)
{
    SqlConnection con13 = new SqlConnection("Data Source = *** ")

    SqlDataAdapter SDA2 = new SqlDataAdapter("SELECT [User],[Login],[number1],[number2],[number3],[Alertcount] FROM Users.dbo.[Email] where [Alertcount] = 1 and [Alertcount] !=2", con13);

    DataTable Users = new DataTable();
    DataTable DATA2 = new DataTable();

    SDA2.Fill(DATA2);

    dataGridView2.DataSource = DATA2;

    foreach (DataGridViewRow dr in dataGridView2.Rows)
    {
        string col2 = 1.Cells["User"].Value.ToString();
        string col1 = 1.Cells["Login"].Value.ToString();
        string col3 = 1.Cells["number1"].Value.ToString();
        string col4 = 1.Cells["number2"].Value.ToString();
        string col5 = 1.Cells["number3"].Value.ToString();
        string col6 = 1.Cells["Alertcount"].Value.ToString();

        var mine = Convert.ToInt32(col3);
        var mine2 = Convert.ToInt32(col5);

        SqlConnection CON2 = new SqlConnection("Data Source = ***")
        CON2.Open();

        SqlDataAdapter SDA = new SqlDataAdapter("SELECT [User],[Login],[Attempt] FROM User.dbo.Actions where  [Attempt] >  '"+mine+ "' and [Attempt] < '" + mine2 + "'", CON2);

        DataTable DATA = new DataTable();
        SDA.Fill(DATA);

        dataGridView1.DataSource = DATA;
    }
}
private void User_Tick(对象发送方,事件参数e)
{
SqlConnection con13=新的SqlConnection(“数据源=***”)
SqlDataAdapter SDA2=新SqlDataAdapter(“从Users.dbo.[Email]中选择[User]、[Login]、[number1]、[number2]、[number3]、[Alertcount],其中[Alertcount]=1和[Alertcount]!=2”,con13);
DataTable用户=新DataTable();
DataTable DATA2=新的DataTable();
SDA2.填充(数据2);
dataGridView2.DataSource=DATA2;
foreach(dataGridView2.Rows中的DataGridViewRow dr)
{
字符串col2=1.Cells[“User”].Value.ToString();
字符串col1=1.Cells[“Login”].Value.ToString();
字符串col3=1.Cells[“number1”].Value.ToString();
字符串col4=1.Cells[“number2”].Value.ToString();
字符串col5=1.Cells[“number3”].Value.ToString();
字符串col6=1.Cells[“Alertcount”].Value.ToString();
var mine=转换为32(col3);
var mine2=转换为32(col5);
SqlConnection CON2=新的SqlConnection(“数据源=***”)
CON2.Open();
SqlDataAdapter SDA=新SqlDataAdapter(“从User.dbo.Actions中选择[User],[Login],[trunt],其中[trunt]>'“+mine+”,[trunt]<'“+mine2+”,CON2);
DataTable数据=新DataTable();
SDA.填写(数据);
dataGridView1.DataSource=数据;
}
}

如果列
trunt
是一个整数(从
trunt<10
运行的事实可以明显看出),则无需以字符串形式向其传递比较值。因此,您的查询应该如下所示:

SqlDataAdapter SDA = new SqlDataAdapter("SELECT [User],[Login],[Attempt] FROM User.dbo.Actions where  [Attempt] >  "+mine+ " and [Attempt] < " + mine2 , CON2);
var query = "SELECT [User],[Login],[Attempt] FROM User.dbo.Actions where  [Attempt] >  "+mine+ " and [Attempt] < " + mine2 ;
SqlDataAdapter SDA = new SqlDataAdapter(query , CON2);
SqlDataAdapter SDA=newsqldataadapter(“从User.dbo.Actions中选择[User],[Login],[trunt],其中[trunt]>“+mine+”和[trunt]<”+mine2,CON2);
我建议您在将来调试此类错误,方法是创建一个查询变量,然后在SQL中手动运行查询以查看错误是什么。你可以这样做:

SqlDataAdapter SDA = new SqlDataAdapter("SELECT [User],[Login],[Attempt] FROM User.dbo.Actions where  [Attempt] >  "+mine+ " and [Attempt] < " + mine2 , CON2);
var query = "SELECT [User],[Login],[Attempt] FROM User.dbo.Actions where  [Attempt] >  "+mine+ " and [Attempt] < " + mine2 ;
SqlDataAdapter SDA = new SqlDataAdapter(query , CON2);
var query=“从User.dbo.Actions中选择[用户],[登录],[尝试],其中[尝试]>“+mine+”和[尝试]<”+mine2;
SqlDataAdapter SDA=新的SqlDataAdapter(查询,CON2);
什么也没发生-没有足够的信息来回答正确的问题。若实际上什么也并没有发生,那个么删除所有
代码块,然后再次运行应用程序。然后,如果出现问题,您将以
异常
的形式获得非常有用的错误信息

然而,问题似乎是您向数据库查询传递了错误的数据。
始终使用
SqlParameter
向查询传递动态数据
SqlParameter
具有可以设置为要对其进行操作的列的对应类型的类型。另外,
SqlParameter
将保护您免受sql注入的影响

尽可能对一次性物品使用
(阅读“始终”)

var emailQuery=
@选择[用户]、[登录]、[号码1]、[号码2]、[号码3]、[警报计数]
来自Users.dbo。[电子邮件]
其中[Alertcount]=1
和[Alertcount]!=2”//无用条件,因为Alertcount已=1
使用(var connection2=newsqlconnection(“数据源=***”))
使用(var adapter2=newsqldataadapter(emailQuery,connection1))
{
var data2=新数据表();
适配器2.填充(数据2);
dataGridView2.DataSource=data2;
}
var actionsQuery=
@选择[用户],[登录],[尝试]
从User.dbo.Actions
其中尝试>@Mine和尝试<@Mine2”;
foreach(dataGridView2.Rows中的var行)
{
var mine=(int)row.Cells[“number1”].Value;//它已经是整数了,只需强制转换即可
var mine2=(int)行单元格[“number3”].Value;
使用(var connection1=newsqlconnection(“数据源=***”))
使用(var adapter1=newsqldataadapter(actionsQuery,connection1))
{
var参数=新[]
{
新的SqlParameter
{
ParameterName=“@Mine”,
SqlDbType=SqlDbType.Int,
价值=我的
},
新的SqlParameter
{
ParameterName=“@Mine2”,
SqlDbType=SqlDbType.Int,
值=2
}
};
adapter1.SelectCommand.Parameters.AddRange(参数);
var data1=新数据表();
适配器。填充(数据1);
dataGridView1.DataSource=data1
}        
}