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 >