[AccessD] c#: Get identity value back from SQL Server

Salakhetdinov Shamil mcp2004 at mail.ru
Sat Aug 11 11:37:38 CDT 2012


Hi John --

Here is a working solution:

http://stackoverflow.com/questions/9645009/i-have-inserted-a-row-i-want-to-get-its-id-and-plus-it-with-an-int-and-insert

Thank you.

-- Shamil


Fri, 10 Aug 2012 08:38:55 -0400 от jwcolby <jwcolby at colbyconsulting.com>:
>	
>
>
	
	
>
		
		
			
>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
>
Website: http://www.databaseadvisors.com
>
			
		
		
	

	


More information about the AccessD mailing list