Hi there,
I'm currently rewriting some database logic. On the project I use a SQL Server 2005 database and make use of Enterpise Library 3.1.
Look at the following code:
public void InsertItem(Item item)
{
try
{
string sqlCommand = "INSERT INTO Items (Id, Name, subject, CreateDate, Message, ParentId) VALUES (@Id, @Name, @Subject, @CreateDate, @Message, @ParentId)";
DBCommand dbCommand = database.GetSqlStringCommand(sqlCommand) ;
AddParameters(dbCommand, item);
database.ExecuteNonQuery(dbCommand);
}
catch (Exception ex)
{
throw ex;
}
}
private void AddParameters(DbCommand dbCommand, Item item)
{
dbCommand.Parameters.Add(new SqlParameter("@Id", SqlDbType.UniqueIdentifier).Value = item.Id );
dbCommand.Parameters.Add(new SqlParameter("@Name", SqlDbType.NChar, 50).Value = item.Naam);
dbCommand.Parameters.Add(new SqlParameter("@Subject", SqlDbType.NChar, 50).Value = item.Onderwerp);
dbCommand.Parameters.Add(new SqlParameter("@CreateDate", SqlDbType.DateTime).Value = item.Datum);
dbCommand.Parameters.Add(new SqlParameter("@Message", SqlDbType.NText).Value = item.Bericht);
dbCommand.Parameters.Add(new SqlParameter("@ParentId", SqlDbType.UniqueIdentifier).Value = item.Id);
}
Why on earth do I get the following exception?:
De SqlParameterCollection accepteert alleen objecten van het type SqlParameter die niet-null zijn en geen objecten van het type Guid.
In plain old english:
The SqlParameterCollection only accepts non-null SqlParameter type objects, not Guid objects
I then rewrote my code to:
SqlParameter sqlParameter = new SqlParameter();
sqlParameter.ParameterName = "@Id";
sqlParameter.DbType = DbType.Guid;
sqlParameter.SqlDbType = SqlDbType.UniqueIdentifier;
sqlParameter.Value = item.Id;
dbCommand.Parameters.Add(sqlParameter);
and that for every parameter. I guess it is really necessary to intialize the DBType as well, something I expected to be happening under the hood. Cause the code above does work indeed!
Anybody who has got different ideas or better suggestions?
Hope this is usefull!
gr,
Robbert