Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
ADO.NET 2.0 heeft verbeterde typeondersteuning voor de DataSet via de System.Data.SqlTypes naamruimte geïntroduceerd. De typen zijn System.Data.SqlTypes ontworpen om gegevenstypen dezelfde semantiek en precisie te bieden als de gegevenstypen in een SQL Server-database. In System.Data.SqlTypes heeft elk gegevenstype een equivalent gegevenstype in SQL Server, met dezelfde onderliggende gegevensweergave.
Het gebruik van System.Data.SqlTypes rechtstreeks in een DataSet biedt verschillende voordelen bij het werken met SQL Server-gegevenstypen. System.Data.SqlTypes ondersteunt dezelfde semantiek als systeemeigen SQL Server-gegevenstypen. Het specificeren van een van de System.Data.SqlTypes in de definitie van een DataColumn elimineert het verlies van precisie dat kan optreden bij het converteren van decimale of numerieke gegevenssoorten naar een van de Common Language Runtime-gegevenstypen (CLR).
In het volgende voorbeeld wordt een DataTable object gemaakt, waarbij de gegevenstypen met behulp van System.Data.SqlTypes expliciet worden gedefinieerd in plaats van CLR-typen. De code vult de DataTable gegevens uit de tabel Sales.SalesOrderDetail in de AdventureWorks-database in SQL Server in. De uitvoer die wordt weergegeven in het consolevenster toont het gegevenstype van elke kolom en de waarden die zijn opgehaald uit SQL Server.
using Microsoft.Data.SqlClient;
using System.Data.SqlTypes;
class Program
{
static void Main()
{
string connectionString = GetConnectionString();
GetSqlTypesAW(connectionString);
Console.ReadLine();
}
static private void GetSqlTypesAW(string connectionString)
{
// Create a DataTable and specify a SqlType
// for each column.
DataTable table = new DataTable();
DataColumn icolumnolumn =
table.Columns.Add("SalesOrderID", typeof(SqlInt32));
DataColumn priceColumn =
table.Columns.Add("UnitPrice", typeof(SqlMoney));
DataColumn totalColumn =
table.Columns.Add("LineTotal", typeof(SqlDecimal));
DataColumn columnModifiedDate =
table.Columns.Add("ModifiedDate", typeof(SqlDateTime));
// Open a connection to SQL Server and fill the DataTable
// with data from the Sales.SalesOrderDetail table
// in the AdventureWorks sample database.
using (SqlConnection connection = new SqlConnection(connectionString))
{
string queryString =
"SELECT TOP 5 SalesOrderID, UnitPrice, LineTotal, ModifiedDate "
+ "FROM Sales.SalesOrderDetail WHERE LineTotal < @LineTotal";
// Create the SqlCommand.
SqlCommand command = new SqlCommand(queryString, connection);
// Create the SqlParameter and assign a value.
SqlParameter parameter =
new SqlParameter("@LineTotal", SqlDbType.Decimal);
parameter.Value = 1.5;
command.Parameters.Add(parameter);
// Open the connection and load the data.
connection.Open();
SqlDataReader reader =
command.ExecuteReader(CommandBehavior.CloseConnection);
table.Load(reader);
// Close the SqlDataReader.
reader.Close();
}
// Display the SqlType of each column.
Console.WriteLine("Data Types:");
foreach (DataColumn column in table.Columns)
{
Console.WriteLine(" {0} -- {1}",
column.ColumnName, column.DataType.UnderlyingSystemType);
}
// Display the value for each row.
Console.WriteLine("Values:");
foreach (DataRow row in table.Rows)
{
Console.Write(" {0}, ", row["SalesOrderID"]);
Console.Write(" {0}, ", row["UnitPrice"]);
Console.Write(" {0}, ", row["LineTotal"]);
Console.Write(" {0} ", row["ModifiedDate"]);
Console.WriteLine();
}
}
static private string GetConnectionString()
{
// To avoid storing the connection string in your code,
// you can retrieve it from a configuration file, using the
// System.Configuration.ConfigurationSettings.AppSettings property
return "Data Source=(local);Initial Catalog=AdventureWorks;"
+ "Integrated Security=SSPI;";
}
}