I am sorry , but , with my poor english, i am not sure to have fully understood your question.
I am using SMO since the release of SQL Server 2005 SP2 ( before SMO was often incomplete or with bugs ).
To get the results of a query ( SElECT mainly ) , i am relying on the SqlClient namespace ( so .Net Framework ) and for the SqlConnection necessary to create a SqlCommand , i get it from the SqlConnectionObject property of Server.ConnectionContext.
I have some doubts to have understood your hypothesis about primary keys with a value of 0. Please, could you tell us whether you want to create a primary key on a column having already values ? If yes, you cannot create a primary key on a column if you have several rows with the same value.
But, it is possible that i have not understood your question ( usually, i can translate english in french, but french into english , really difficult for me and i hope you will excuse me ).
Have a nice day