jack drawbridge
jackandpat.d at gmail.com
Fri Aug 10 07:51:06 CDT 2012
John,
I'm not a SQL server person, nor c#, but I found this that may be worth a
read.
http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record/
Don't shoot the messenger if it isn't applicable.
jack
On Fri, Aug 10, 2012 at 8:38 AM, jwcolby <jwcolby at colbyconsulting.com>wrote:
> I have written a function to perform an insert using a passed in SQL
> string. I need it to return an integer PK autoincremented by the table:
>
> public int mExecNonQueryReturnIdentity(**string strCnn, string strSQL,
> int timeOut)
> {
> int intIdentity = 0; //reset the records affected property
> before we execute
> SqlConnection mCnn = null; //setup a sql connection object
> SqlCommand myCommand = null; //setup a sql command object
> try
> {
> mCnn = new SqlConnection(strCnn); //create a new sql
> connection using the connection string passed in
> mCnn.Open(); //open the connection
> myCommand = new SqlCommand(strSQL, mCnn); //create a
> new command using the sql connection and sql statment
> myCommand.CommandTimeout = 60; //set the command time
> out
> SqlParameter param = new SqlParameter("@ID",
> SqlDbType.Int, 4);
> param.Direction = ParameterDirection.Output;
> myCommand.Parameters.Add(**param);
>
> myCommand.ExecuteNonQuery(); //execute the sql
> statement and set the records affected property
> intIdentity = (int)param.Value;
> }
> catch (SqlException ex)
> {
> logger.Error(ex.ToString());
> }
> return intIdentity ;
> }
>
> The SQL statement looks like:
>
> string strSQLInsert = "INSERT INTO " + dbName + ".dbo." + tblName + " " +
> "(" +
> "CSS_Name," +
> "CSS_DteStart" +
> ") " +
> "VALUES " +
> "(" +
> "'DatabaseCrossReferenceCount_**" + strNow + "'," +
> "'" + strNow + "' " +
> "); " +
> "SELECT @@IDENTITY AS 'ID'"
> ;
>
> PK = mExecNonQueryReturnIdentity(**cnn, strSQLInsert, 600);
>
> The record is inserted into the table but param in
> mExecNonQueryReturnIdentity is {} which is null I suppose. As a result i
> fall into the catch saying that the (int) "specified cast is not valid". I
> am trying to cast a null to an int. But the question is why is the
> returned value a null instead of an integer ID.
>
> There are a ton of hits on google about how to do this but they always
> break down into quarrels about "This is not safe and that is not safe and
> ...". All the safe issues should not apply in my specific case because I
> am controlling the context by doing this from my C# code.
>
> I think the best solution seems to be doing the output parameter and
> passing something back which is the ID but I can't seem to figure out which
> part - the sql statement or the c# function (or both?) is in error.
>
> Any help greatly appreciated.
>
> --
> John W. Colby
> Colby Consulting
>
> Reality is what refuses to go away
> when you do not believe in it
>
> --
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/**mailman/listinfo/accessd<http://databaseadvisors.com/mailman/listinfo/accessd>
> Website: http://www.databaseadvisors.**com<http://www.databaseadvisors.com>
>