jwcolby
jwcolby at colbyconsulting.com
Sat Aug 11 12:08:30 CDT 2012
Thanks!
John W. Colby
Colby Consulting
Reality is what refuses to go away
when you do not believe in it
On 8/11/2012 12:37 PM, Salakhetdinov Shamil wrote:
> 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.
>>
>>