我是使用C#的新手,现在正在搞乱SQL Server连接。我的连接正常,我可以运行查询,我只是无法查看返回的任何数据。我已经看到您需要运行command.ExecuteReader()
来获取数据,但我无法获得除第一列和第一列之外的任何其他数据。
这是我的代码:
<%@ WebHandler Language="C#" Class="biquery_query" %>
using System;
using System.Web;
using System.Data;
using System.Data.SqlClient;
public class biquery_query : IHttpHandler {
public void ProcessRequest (HttpContext context) {
var query = context.Request.QueryString["query"];
query = "SELECT * FROM [hidden].[dbo].[hidden]";
SqlConnection sqlConnection = new SqlConnection(@"Data Source=hidden;Initial Catalog=hidden;User ID=hidden;Password=hidden;");
// Create Query Command
SqlCommand command = new SqlCommand();
command.CommandType = CommandType.Text;
command.CommandText = query;
command.Connection = sqlConnection;
// Open connection and execute query
sqlConnection.Open();
command.ExecuteNonQuery();
using(SqlDataReader rdr = command.ExecuteReader())
{
while(rdr.Read())
{
string app_id= rdr["app_id"].ToString();
string app_os= rdr["app_os"].ToString();
string date= rdr["date"].ToString();
context.Response.Write(app_id);
}
}
sqlConnection.Close();
}
public bool IsReusable {
get {
return false;
}
}
}
我的数据库表有5列(app_id, app_os, date, unix, users
)。
我有没有办法选择rdr["app_id"][0]
来获取第一个app_id或rdr["users"][30]
。
非常感谢任何帮助,谢谢!
答案 0 :(得分:2)
移除对ExecuteNonQuery
的来电,然后使用ExecuteReader
。
答案 1 :(得分:1)
如果您有DataReader
,则可以使用column name
来阅读数据。我只需阅读为string
,您可以convert
随意使用。请检查一下:
public class test
{
public string app_id { get; set; }
public string app_os { get; set; }
public string date { get; set; }
public string users { get; set; }
}
List<test> list = new List<test>();
using (SqlDataReader rdr = command.ExecuteReader())
{
while (rdr.Read())
{
test ob = new test();
ob.app_id = rdr["app_id"].ToString();
ob.app_os = rdr["app_os"].ToString();
ob.date = rdr["date"].ToString();
ob.users = rdr["users"].ToString();
list.Add(ob);
}
}
请检查上面的代码,我已创建class
名称test
,并将DataReader
的完整数据读入list
。现在您可以使用您的数据进行进一步处理。
您可以在阅读Database
时验证您的数据,请查看以下内容:
//ob.app_id = rdr["app_id"].ToString();
// if app_id is string
ob.app_id = (rdr["app_id"] == DBNull.Value) ? string.Empty : Convert.ToString(rdr["app_id"]);
// if app_id is int
ob.app_id = (rdr["app_id"] == DBNull.Value) ? 0 : Convert.ToInt64(rdr["app_id"]);
答案 2 :(得分:0)
使用SqlDataReader,一切都必须逐行进行 - 顺序访问。 SqlDataReader的优点是可以处理非常大的记录集,而不会同时将所有数据都存储在内存中。缺点是你无法按照自己的要求行事。
您的另一种选择是通过SqlDataAdapter将整个记录集放入DataTable或DataSet对象中。这是sample code from MS:
private static DataSet SelectRows(DataSet dataset,
string connectionString,string queryString)
{
using (SqlConnection connection =
new SqlConnection(connectionString))
{
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = new SqlCommand(
queryString, connection);
adapter.Fill(dataset);
return dataset;
}
}