我想用微软企业库的数据库管理组件进行数据库连接的,
private Database db = DatabaseFactory.CreateDatabase();
这个的数据库连接串本来是写在app.config里的,但我想在程序运行时动态创建连接
请问怎么在程序运行时输入数据库密码,然后再进行数据库连接?

解决方案 »

  1.   

    你的意思是否是弹出一个类似与windows NT的登录框提示你输入帐号密码?
      

  2.   

    .NET可以调用WINDOWS NT的登录框,不过要用到非托管的代码,要用到[DllImport("credui.dll", EntryPoint = "CredUIConfirmCredentialsW", CharSet = CharSet.Unicode)]        private static extern CredUIReturnCodes CredUIConfirmCredentials(string targetName, [MarshalAs(UnmanagedType.Bool)] bool confirm); [DllImport("credui.dll", EntryPoint = "CredUIPromptForCredentials", CharSet = CharSet.Ansi)]        private static extern CredUIReturnCodes CredUIPromptForCredentials(ref CREDUI_INFO creditUR,                                                                                                                        string targetName,                                                                                                                        IntPtr reserved1,                                                                                                                        int iError,                                                                                                                        StringBuilder userName,                                                                                                                        int maxUserName,                                                                                                                        StringBuilder password,                                                                                                                        int maxPassword,                                                                                                                        [MarshalAs(UnmanagedType.Bool)] ref bool pfSave,                                                                                                                        CREDUI_FLAGS flags);
    public struct CREDUI_INFO
        {        public int cbSize;        public IntPtr hwndParent;        public string pszMessageText;        public string pszCaptionText;        public IntPtr hbmBanner;    }    [Flags]    enum CREDUI_FLAGS
        {        INCORRECT_PASSWORD = 0x1,        DO_NOT_PERSIST = 0x2,        REQUEST_ADMINISTRATOR = 0x4,        EXCLUDE_CERTIFICATES = 0x8,        REQUIRE_CERTIFICATE = 0x10,        SHOW_SAVE_CHECK_BOX = 0x40,        ALWAYS_SHOW_UI = 0x80,        REQUIRE_SMARTCARD = 0x100,        PASSWORD_ONLY_OK = 0x200,        VALIDATE_USERNAME = 0x400,        COMPLETE_USERNAME = 0x800,        PERSIST = 0x1000,        SERVER_CREDENTIAL = 0x4000,        EXPECT_CONFIRMATION = 0x20000,        GENERIC_CREDENTIALS = 0x40000,        USERNAME_TARGET_CREDENTIALS = 0x80000,        KEEP_USERNAME = 0x100000,    }    public enum CredUIReturnCodes
        {        NO_ERROR = 0,        ERROR_CANCELLED = 1223,        ERROR_NO_SUCH_LOGON_SESSION = 1312,        ERROR_NOT_FOUND = 1168,        ERROR_INVALID_ACCOUNT_NAME = 1315,        ERROR_INSUFFICIENT_BUFFER = 122,        ERROR_INVALID_PARAMETER = 87,        ERROR_INVALID_FLAGS = 1004,    }
      

  3.   

    自己写个登陆窗口。企业库带的ConfigManagement可能会提供便捷方式吧