Además de chrfalch's post, aquí algunos ejemplos de código para la actualización de un DSN (sé que el PO es pidiendo la creación, sin embargo, este código es fácilmente traducible a lo que usted tiene que hacer) utilizando la llamada a la API en lugar de a través del registro directo (usando la información de la pinvoke.net page): -
[DllImport("ODBCCP32.DLL", CharSet = CharSet.Unicode, SetLastError = true)]
static extern bool SQLConfigDataSourceW(UInt32 hwndParent, RequestFlags fRequest, string lpszDriver, string lpszAttributes);
enum RequestFlags : int
{
ODBC_ADD_DSN = 1,
ODBC_CONFIG_DSN = 2,
ODBC_REMOVE_DSN = 3,
ODBC_ADD_SYS_DSN = 4,
ODBC_CONFIG_SYS_DSN = 5,
ODBC_REMOVE_SYS_DSN = 6,
ODBC_REMOVE_DEFAULT_DSN = 7
}
bool UpdateDsnServer(string name, string server)
{
var flag = RequestFlags.ODBC_CONFIG_SYS_DSN;
string dsnNameLine = "DSN=" + name;
string serverLine = "Server=" + server;
string configString = new[] { dsnNameLine, serverLine }.Aggregate("", (str, line) => str + line + "\0");
return SQLConfigDataSourceW(0, flag, "SQL Server", configString);
}
a mí me funcionó, acaba de cambiar uno entrada de "Servidor" a "Nombre de servidor". Quizás esto sea un cambio en Windows 7. – newenglander