В приведенном ниже коде представлены два распространенных способа получения набора результатов из инструкции SELECT в ADO.Net.
Существует сайт под названием ConnectionStrings.com, который показывает все различные способы подключения к SQL Server, а также множество других типов баз данных.
Если вы новичок в программировании на C#, то using statement - отличный способ избежать утечек ресурсов при работе с объектами, реализующими IDisposable.
Возвращение сложных типов от WebMethod
может привести к ошибке. Основной XML-сериализатор метода может не знать, как обращаться с определенными типами. В этом случае XmlIncludeAttribute может использоваться для предоставления явной информации о типе. Вот MSDN thread, обсуждая, как это сделать.
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web.Services;
namespace ConsoleApplication19
{
public class Program
{
public static void Main(String[] args)
{
var connectionString = "Data Source=MyWebBasedServer;Initial Catalog=MyDatabase;Persist Security Info=False;User ID=MyLogin;Password=MyPassword;";
var a = GetEmployeeIDs_Version1(connectionString);
var b = GetEmployeeIDs_Version2(connectionString);
}
/* Version 1
Use a "while" loop to fill a WebData list and return it as an array. */
[WebMethod]
private static WebData[] GetEmployeeIDs_Version1(String connectionString)
{
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
var commandText = "SELECT ID, SurName from MyTable";
using (var command = new SqlCommand() { Connection = connection, CommandType = CommandType.Text, CommandText = commandText })
{
using (var reader = command.ExecuteReader(CommandBehavior.CloseConnection))
{
var result = new List<WebData>();
while (reader.Read())
result.Add(new WebData() { ID = Convert.ToInt32(reader["ID"]), Surname = reader["Surname"].ToString() });
return result.ToArray();
}
}
}
}
/* Version 2
Fill a DataSet with the result set.
Because there's only one SELECT statement, ADO.Net will
populate a DataTable with that result set and put the
DataTable in the dataset's Tables collection.
Use LINQ to convert that table into a WebData array. */
[WebMethod]
private static WebData[] GetEmployeeIDs_Version2(String connectionString)
{
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
var commandText = "SELECT ID, SurName from MyTable";
using (var command = new SqlCommand() { Connection = connection, CommandType = CommandType.Text, CommandText = commandText })
{
using (var adapter = new SqlDataAdapter())
{
var dataSet = new DataSet();
adapter.SelectCommand = command;
adapter.Fill(dataSet);
return
dataSet
// There should only be one table in the dataSet's Table's collection.
.Tables[0]
.Rows
// DataTable isn't LINQ-aware. An explicit cast is needed
// to allow the use of LINQ methods on the DataTable.Rows collection.
.Cast<DataRow>()
// The rows in a DataTable filled by an SqlDataAdapter
// aren't strongly typed. All of a row's columns are
// just plain old System.Object. Explicit casts are necessary.
.Select(row => new WebData() { ID = Convert.ToInt32(row["ID"]), Surname = row["Surname"].ToString() })
// Use LINQ to convert the IEnumerable<WebData> returned by
// the .Select() method to an WebData[].
.ToArray();
}
}
}
}
}
public class WebData
{
public Int32 ID { get; set; }
public String Surname { get; set; }
}
}
Похоже, что вам нужно позвонить .open() в Connection. Также: с какой базой данных вы подключаетесь? Recordset выглядит как старые классы DAO для меня. Я не видел этот синтаксис много лет. –
Не соединение, открытое rs.Open, когда оно использует соединение «conn». Я подключаюсь к базе данных, размещенной на smarterasp.net, своей базе данных mssql. Я снял это с видео с YouTube. Может быть, ты поможешь мне. Все, что я пытаюсь сделать, приносит список идентификаторов из MyTable из моей базы данных и собирается занести его в приложение для Android. Какие-либо предложения? –
Строка подключения выглядит подозрительной, поскольку вы используете класс ADO Connection, строка подключения должна иметь следующий формат: '' Provider = MySQLProv; server = MyWebBasedServer; uid = MyUserName; pwd = MyPassword; database = MyDatabase "' – vendettamit