天道酬勤,学无止境

如何在控制台应用程序中添加 c# 登录尝试循环?(How to add c# login attempts loop in console application?)

问题

我是这种语言的新手,我尝试过一些事情,但无法弄清楚如何设置登录循环以使用最大登录次数。 3 次。 有人可以帮我吗?

    static void Main(string[] args)
    {

        Console.WriteLine("Status: " + status.Onaangemeld);
        Console.WriteLine("Welkom, typ hieronder het gebruikersnaam:");
        string Naam = Console.ReadLine();

        Console.WriteLine("Vul hieronder het wachtwoord in:");
        string Wachtwoord = Console.ReadLine();

        if (Naam == "gebruiker" && Wachtwoord == "SHARPSOUND")
        {
            Console.Clear();
            Console.WriteLine("Status: " + status.Ingelogd);
            Console.WriteLine("Welkom bij SoundSharp {0}!", Naam);
            Console.ReadLine();
        }

        else
        Console.Clear();
        Console.WriteLine("Helaas, gebruikersnaam of wachtwoord niet correct.");

    }
  }
回答1
static void Main(string[] args)
{
    for (int i=0; i<3; i++) 
    {
        Console.WriteLine("Status: " + status.Onaangemeld);
        Console.WriteLine("Welkom, typ hieronder het gebruikersnaam:");
        string Naam = Console.ReadLine();

        Console.WriteLine("Vul hieronder het wachtwoord in:");
        string Wachtwoord = Console.ReadLine();

        if (Naam == "gebruiker" && Wachtwoord == "SHARPSOUND")
        {
            Console.Clear();
            Console.WriteLine("Status: " + status.Ingelogd);
            Console.WriteLine("Welkom bij SoundSharp {0}!", Naam);
            Console.ReadLine();
            break;
        }


        Console.Clear();
        Console.WriteLine("Helaas, gebruikersnaam of wachtwoord niet correct.");

    }

    Console.Clear();
    Console.WriteLine("....");
}

}

回答2

您应该添加 for 循环以获得最大尝试次数。 作为参考,您可以阅读以下内容

https://msdn.microsoft.com/en-us/library/ch45axte.aspx

您可以相应地使用 for 循环,无论您是希望用户只输入密码还是同时输入用户名和密码

回答3

为什么不递归

    class Program
    {
        const int MaxAttempt = 3;
        static int currentAttempt = 0;

        static void Main(string[] args)
        {
            if (MaxAttempt == currentAttempt)
            {
                Console.WriteLine("You have reached maximum try .. please come after some time");
                Console.ReadLine();
                Environment.Exit(0);
            }

            currentAttempt++;

            Console.WriteLine("Status: " + status.Onaangemeld);
            Console.WriteLine("Welkom, typ hieronder het gebruikersnaam:");
            string Naam = Console.ReadLine();

            Console.WriteLine("Vul hieronder het wachtwoord in:");
            string Wachtwoord = Console.ReadLine();

            if (Naam != "gebruiker" || Wachtwoord != "SHARPSOUND")
            {
                Console.Clear();
                Console.WriteLine("Helaas, gebruikersnaam of wachtwoord niet correct. Please try again");
                Console.ReadLine();
                Console.Clear();
                Main(args);
            }


            Console.Clear();
            Console.WriteLine("Status: " + status.Ingelogd);
            Console.WriteLine("Welkom bij SoundSharp {0}!", Naam);
            Console.ReadLine();


        }
    }

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Ruby:在 Windows 上获取当前登录的用户(Ruby: Get currently logged in user on windows)
    问题 在 C# 中,我可以使用 HttpContext 获取 Web 应用程序的当前用户,但是,我不知道如何在 Ruby 中执行此操作。 有没有办法做到这一点? 对于那些说这是不可能的人,这里有证据: http://www.codeproject.com/KB/aspnet/How_to_NT_User_Name.aspx 回答1 好吧,要获得当前的用户名,有这个: puts ENV['USERNAME'] 或者去Win32API。 require 'dl/win32' def get_user_name api = Win32API.new( 'advapi32.dll', 'GetUserName', 'PP', 'i' ) buf = "\0" * 512 len = [512].pack('L') api.call(buf,len) buf[0..(len.unpack('L')[0])] end puts get_user_name 编辑:我是个白痴。 这根本不是你要求的。 哦,好吧,我花了一些时间从我的代码中挖掘出来,所以最好留在这里,让其他想知道的人:P 再次编辑:好吧,事实证明我毕竟不是白痴。 这就是你想要的。 当我回去重新阅读你的问题时, HttpContext 把我吓跑了,我认为这是来自 HTTP auth 或其他东西的当前用户名。 回答2
  • 如何将计时器添加到C#控制台应用程序(How do you add a timer to a C# console application)
    问题 就是这样-您如何向C#控制台应用程序添加计时器? 如果您可以提供一些示例代码,那就太好了。 回答1 很好,但是为了模拟一些时间流逝,我们需要运行一个需要一些时间的命令,在第二个示例中这非常清楚。 但是,使用for循环永久执行某些功能的样式占用大量设备资源,相反,我们可以使用垃圾收集器来执行类似的操作。 我们可以在同一本书《 CLR via C#Third Ed》的代码中看到此修改。 using System; using System.Threading; public static class Program { public static void Main() { // Create a Timer object that knows to call our TimerCallback // method once every 2000 milliseconds. Timer t = new Timer(TimerCallback, null, 0, 2000); // Wait for the user to hit <Enter> Console.ReadLine(); } private static void TimerCallback(Object o) { // Display the date/time when this method got
  • 循环变量上的闭包的正确语义是什么? [关闭](What are the correct semantics of a closure over a loop variable? [closed])
    问题 就目前而言,这个问题不适合我们的问答形式。 我们希望答案得到事实、参考或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。 如果您觉得此问题可以改进并可能重新打开,请访问帮助中心以获取指导。 8 年前关闭。 考虑以下 lua 代码: f = {} for i = 1, 10 do f[i] = function() print(i .. " ") end end for k = 1, 10 do f[k]() end 这将打印从 1 到 10 的数字。在这种情况下, i对外部循环的每次迭代的值进行封闭。 这就是我一直以来对闭包的理解,我很高兴...... ...直到我将一些 lua 代码移植到 c# 中,并且我尝试做同样的事情: var f = new Action[10]; for (int i = 0; i < 10; i++) { f[i] = (new Action(delegate() { Console.Write(i + " "); })); } for (int k = 0; k < 10; k++) { f[k](); } 现在我将数字 10 打印了 10 次(让我们忘记 lua 数组是基于 1 的)。 实际上,在这种情况下,闭包对变量起作用,而不是对它的值起作用,这很有意义,因为我只在第一个循环结束后调用函数。 JavaScript
  • 使用ASCII字符编码在C#中将字符串转换为byte []数组的最快方法(性能方面)(Quickest way (performance-wise) to turn a string into a byte[] array in C# using the ASCII character encoding)
    问题 在C#中将字符串转换为byte []数组的最快方法是什么? 我正在通过套接字发送大量的字符串数据,并且需要优化每个操作。 目前,在使用以下命令发送之前,我将字符串转换为byte []数组: private static readonly Encoding encoding = new ASCIIEncoding(); //... byte[] bytes = encoding.GetBytes(someString); socket.Send(bytes); //... 回答1 如果您的所有数据确实都是ASCII,那么您可以比ASCIIEncoding稍快一些,后者具有各种(完全合理)的错误处理等。您也可以通过避免创建新数据来加快处理速度字节数组一直存在。 假设您有一个上限,所有消息都将位于下面: void QuickAndDirtyAsciiEncode(string chars, byte[] buffer) { int length = chars.Length; for (int i = 0; i < length; i++) { buffer[i] = (byte) (chars[i] & 0x7f); } } 然后,您将执行以下操作: readonly byte[] Buffer = new byte[8192]; // Reuse this repeatedly
  • 为什么在 VS 2010 和 VS 2012 中构建的应用程序的行为存在差异?(Why is there a difference in behaviour of an application built in VS 2010 v.s. VS 2012?)
    问题 我正在检查在我们的构建机器上安装 .NET 4.5 是否会更改 VS 2010 生成的输出 IL 图像。 因为我知道 foreach 的行为在 .NET 4.5 中已经改变以避免由于访问修改的闭包而导致的问题,所以我选择了一个展示该行为的简单应用程序。 class Program { private static void Main(string[] args) { var contents = new List<Func<int>>(); var s = new StringBuilder(); int[] values = new int[] { 4, 5, 6 }; foreach (int value in values) { contents.Add(() => value); } for (var k = 0; k < contents.Count; k++) s.Append(contents[k]()); Console.WriteLine(s); } VS 2010 输出:666 VS 2012 输出:456 我在 VS 2010 中创建了一个控制台应用程序,并在 VS 2012 中创建了一个具有相同代码的控制台应用程序(均针对 .NET 4)。 但是,基于构建它们的 IDE,这两个控制台应用程序表现出不同的行为。 在构建输出中
  • 我在 C# 中有一个 2d (nxn) 字符串数组,如何将它动态输出到网页(尝试过数据表/绑定等...)(I have a 2d (n x n) string array in C#, how do I get it ouputted to a webpage dynamically (Tried DataTables/Binding, etc…))
    问题 我有一个需要输出到网页的 n × n 字符串数组,我发现一些解决方案需要很多(读取:很多)行代码(通常将其转换为 DataTable 然后绑定到 GridView)。 而且几乎所有这些解决方案甚至都不适用于我的数组的动态特性(我不知道将生成多少列和行,也不知道列的名称:它是用户控制的)。 我发现所有这些解决方案都有些荒谬,并且在某些情况下比我已经设计的整个模块还要大,只是为了输出一小部分我的数据...... 这是我尝试做的一个例子: object1 = (string[,]) r.GetSymbol("stringArray"); //I retrieve n x n array and cast as a string contained in an object (have to do this because I am using COM interfaces). Output_GridView.DataSource = object1; //(If I try to convert this to a string, it returns the dataType "string" not the 2d array Output_GridView.DataBind(); 这不起作用(根据我得到的错误,它需要一个一维数组,我不知道为什么 DataSource
  • 如何在C#中遍历可枚举集合时修改或删除项目(How to modify or delete items from an enumerable collection while iterating through it in C#)
    问题 我必须从数据表中删除一些行。 我听说在迭代过程中更改集合是不行的。 因此,我应该首先遍历数据表并将所有行添加到列表中,然后遍历列表并进行标记,而不是先检查一行是否满足删除要求然后将其标记为已删除的for循环。删除行。 是什么原因造成的?我有什么选择(而不是使用我所指的行列表)? 回答1 如果使用简单的for循环,则可以从集合中删除元素。 看一下这个例子: var l = new List<int>(); l.Add(0); l.Add(1); l.Add(2); l.Add(3); l.Add(4); l.Add(5); l.Add(6); for (int i = 0; i < l.Count; i++) { if (l[i] % 2 == 0) { l.RemoveAt(i); i--; } } foreach (var i in l) { Console.WriteLine(i); } 回答2 向后遍历List听起来是一种更好的方法,因为如果删除一个元素而其他元素“落入空隙”,则没关系,因为您已经查看了这些元素。 同样,您不必担心计数器变量变得比.Count大。 List<int> test = new List<int>(); test.Add(1); test.Add(2); test.Add(3); test.Add(4); test.Add(5); test
  • 使用C#在本地注销Windows用户(Log off a Windows user locally using c#)
    问题 我目前正在开发一些家长控制软件。 该软件应该注销用户,然后锁定帐户,以便除非父母/管理员指定可以登录,否则他们无法重新登录。 到目前为止,我已经尝试了几件事,例如在用户帐户上设置了说它被禁用的标志。 这会将其从登录屏幕中完全删除。 从我发现的情况来看,如果用户帐户已登录,则不会应用ADS_Disable标志。 我也尝试过寻找注销另一个帐户的资源,但似乎只能找到有关注销运行logout命令的帐户的信息。 例如Pinvoke,或直接调用LOGOUT.EXE程序。 我在LSAUser上找到了一个资源,发现那里可能有东西。 我正在为学校做这个项目,我需要一些指导。 由于这样做的信息稀少,是否有更好的方法来做我想做的事情? 还是有一个我不应该这样做的原因? 还有其他选择吗? 回答1 使用WTSDisconnectSession() Windows API。 在这里看到文章。 using System; using System.Runtime.InteropServices; using System.ComponentModel; class Program { [DllImport("wtsapi32.dll", SetLastError = true)] static extern bool WTSDisconnectSession(IntPtr hServer, int
  • 什么时候应该将 LINQ 用于 C#? [关闭](When should I use LINQ for C#? [closed])
    问题 关闭。 这个问题是基于意见的。 它目前不接受答案。 想改善这个问题吗? 更新问题,以便通过编辑这篇文章用事实和引文来回答问题。 7年前关闭。 改进这个问题 我正在学习 C#,我发现 LINQ 非常有趣。 然而,令我感到困惑的是,我想不出使用 LINQ 会带来巨大帮助的场景,因为在代码中复制 LINQ 功能并不是那么难。 您可能想分享任何个人经验/建议? 谢谢! 回答1 我发现几乎在我之前编写循环来填充容器的任何时候都在使用 LINQ。 我使用 LINQ to SQL 作为我的 ORM,并在其他地方使用了许多 LINQ。 这是我为 Active Directory 帮助程序类编写的一个小片段,用于确定特定用户是否属于特定组。 请注意使用 Any() 方法迭代用户的授权组,直到找到具有匹配 SID 的授权组。 比替代方案更干净的代码。 private bool IsInGroup( GroupPrincipal group, UserPrincipal user ) { if (group == null || group.Sid == null) { return false; } return user.GetAuthorizationGroups() .Any( g => g.Sid != null && g.Sid.CompareTo( group.Sid ) == 0
  • 如何使用代码生成来动态创建 C# 方法?(How to use code generation to dynamically create C# methods?)
    问题 为了在 C 中定义一个可由 Lua 调用的方法,它必须匹配给定的签名并使用 Lua API 来检索参数并返回结果。 我正在编写 Lua 的 C# 包装器,并且我对能够调用任意 C# 方法而不使它们遵循这些约定很感兴趣。 当用 D 之类的东西包装时,人们可能会使用模板系统为任何给定的方法动态创建此粘合代码。 我认为这在 C# 中也是可能的,但是通过使用动态代码生成。 C API 看起来像这样,生成的代码将通过我的库的较低级别部分来操作它,该部分 P/Invokes Lua C 库。 static int foo (lua_State *L) { int n = lua_gettop(L); /* number of arguments */ lua_Number sum = 0; int i; for (i = 1; i <= n; i++) { if (!lua_isnumber(L, i)) { lua_pushstring(L, "incorrect argument"); lua_error(L); } sum += lua_tonumber(L, i); } lua_pushnumber(L, sum/n); /* first result */ lua_pushnumber(L, sum); /* second result */ return 2; /*
  • 在 C# 中验证远程 Active Directory 的用户(Validate users of Remote Active Directory in C#)
    问题 我尝试从我的机​​器验证属于远程 ActiveDirectory 的用户,这与当前机器或用户域不同。 我的机器和远程 ActiveDirectory 机器之间将不存在信任。 初步尝试 我尝试对用户进行身份验证(输入:sAMAccountName、机器的 ipaddress、机器的域用户名(“管理员”)和机器的密码(***)。能够得到具有“sAMAccountName”的用户确实存在于 ActiveDirectory 中的结果。 我的要求: 假设已经在 ActiveDirectory 中创建了一个用户(“qwerty”) 从我的本地机器,我将获得以下信息, 一种。 远程 ActiveDirectory ipaddress b。 远程 ActiveDirectory 机器的用户名和密码。 C。 用户“qwerty”的用户名和密码我需要检查远程 ActiveDirectory 的用户列表中是否存在用户“qwerty”,并验证 ActiveDirectory 的用户列表中输入的密码是否相同 我试过的代码: DirectoryEntry entry = new DirectoryEntry("LDAP://ipaddress/DC=dinesh,DC=com", name, password); DirectorySearcher searcher = new
  • 如何使用变量更改sql登录密码(How to change a sql login password with variables)
    问题 我正在尝试使用 Alter LOGIN 更新现有 SQL 登录的密码 我知道以下作品 ALTER LOGIN [username1] WITH PASSWORD = 'somenewpassword123'; 但是,当我尝试使用局部变量时 DECLARE @newpass nvarchar(max); SET @newpass = 'P@ssw0rd12345'; ALTER LOGIN [username1] WITH PASSWORD = @newpass; 这失败了。 将 [] 大括号添加到变量似乎可以在 SSMS 查询编辑器中解决此问题,但是通过在 C# 中写出查询以编程方式使用它,它与上述语句一样失败,并出现相同的错误(密码处的语法错误) c#应用程序中的代码 public static int UpdateSqlLoginPassword(DbContext context, string loginName, string password) { try { string updatePassword = @" SET NOCOUNT ON DECLARE @loginName AS nvarchar(max) = {0} DECLARE @password AS nvarchar(max) = {1} EXEC(' USE master ALTER LOGIN
  • 在 C# 中为变量名添加数字(Adding a number to variable names in C#)
    问题 我的问题有点像这里找到的问题:如何在 C# 中动态命名变量? 然而它有点不同所以我想知道它是否可能。 我正在尝试从 .settings 文件中读取一堆字符串。 我将它们全部命名为 Time1、Time2、Time3 等...我希望用户能够向文件中添加更多时间,因此可能有 Time100 或更多。 我在设置文件中有一个大小,它将跟踪时间变量的数量。 我想写一些可以读取所有时间字符串的东西。 我认为用 100 个时间变量预填充 .settings 文件是愚蠢的,所以我知道它们在那里,然后手动读取每个变量。 所以我想知道是否有一种方法可以让我在 Timei 或 Time+i 中读取,其中我是一个整数,我可以将其放入一个循环中以找到所有这些。 (请注意,数据是字符串而不是时间,它只是将转换为星期几)例如:(天数来自 ApplicationSettingsBase [aka file add new Settings1.settings] public static int AvDaysIndex = Days.Default.Size; //This holds the number of items in Days public static DayOfWeek[] AvailableDays = new DayOfWeek[AvDaysIndex]; //This is
  • .NET执行SQL性能优化二: 如何使用批处理来改善 SQL 数据库应用程序的性能
    如何使用批处理来改善 SQL 数据库应用程序的性能对 Azure SQL 数据库执行批处理操作可以大幅改善应用程序的性能和缩放性。 为了帮助你了解优点,本文的第一部分包含一些示例测试结果用于比较对 SQL 数据库发出的顺序请求和分批请求。 本文的余下部分介绍了帮助你在 Azure 应用程序中成功使用批处理的方法、方案和注意事项。为什么批处理对 SQL 数据库很重要对远程服务的批处理调用是提高性能和可伸缩性的常用策略。 对于任何与远程服务的交互(如序列化、网络传输和反序列化),都有固定的处理开销。 将很多单独的事务打包为一个批处理操作可最大限度降低这些成本。在本文中,我们要比较各种 SQL 数据库批处理策略和情形。 尽管这些策略对于使用 SQL Server 的本地应用程序也很重要,但是将批处理用于 SQL 数据库主要是基于以下两个原因:在访问 SQL 数据库时可能有更长的网络延迟,特别是从同一 Microsoft Azure 数据中心外部访问 SQL 数据库 时。SQL 数据库的多租户特征意味着数据访问层的效率与数据库的总体缩放性关联。 SQL 数据库必须防止任何单个租户/用户独占数据库资源,从而对其他租户不利。 在使用量超过预定义的配额时,SQL 数据库可减小吞吐量或引发限制异常。 一些提高效率的措施(如批处理),允许在达到这些配额前在 SQL 数据库上做更多的工作
  • c#创建日志文件的最佳方法(c# Best Method to create a log file)
    问题 我正在编写一个工具,该工具将检查网络中工作站的运行状况,并将根据发现的问题进行修复。 我想在应用程序通过每台计算机上的任务/检查运行时创建一个日志文件。 我现在只是想让它在一台机器上工作,但是随着时间的流逝,它将一次性扫描100多台机器。 创建日志文件的最佳方法是什么? 我正在考虑使用List<string>在内存中建立日志文件,然后在完成后将其输出到文件中。 我只是在想可能会有更好的方法呢? 回答1 我不会使用第三方库,而是会登录到xml文件。 这是一个代码示例,可以从不同的线程登录到xml文件: private static readonly object Locker = new object(); private static XmlDocument _doc = new XmlDocument(); static void Main(string[] args) { if (File.Exists("logs.txt")) _doc.Load("logs.txt"); else { var root = _doc.CreateElement("hosts"); _doc.AppendChild(root); } for (int i = 0; i < 100; i++) { new Thread(new ThreadStart(DoSomeWork)).Start(
  • c# GDI+,在循环中创建一个 LinearGradientBrush(内存泄漏)(c# GDI+, Creating a LinearGradientBrush in a loop (memory leaks))
    问题 今天我遇到了一个困境。 我创建了一个使用 GDI+ 在表单上绘图的应用程序。 绘图每秒由一个计时器触发。 draw 方法使用 for 循环遍历对象集合,如果它们处于特定状态,则绘制它们。 我想使用 LinearGradientBrush 绘制它们只是因为它看起来比简单的 Brush 好看得多。 看看下面的 //minutes foreach (Led l in MinuteGrid.Leds) { LinearGradientBrush b = new LinearGradientBrush (l.LedRectangle, Color.GreenYellow, Color.Green, 110); if (l.IsLit) g.FillRectangle(b, l.LedRectangle); b.Dispose(); } 我正在为循环的每次迭代创建一个新的 LinearGradientBrush(这让我很困扰),但那是因为我必须这样做。 我不能在循环外创建一个,因为它的构造函数集要求我设置只在循环内知道的参数。 我发现在 LinearGradientBrush 对象上使用 dispose 方法并不是那么可靠。 如果我运行我的应用程序并在任务管理器中查看它,它的内存会喷涌而出。 当我然后添加 b = null 行时,这似乎有很大帮助,如下所示 foreach (Led l
  • 时间限制 C# 中的方法(Time limiting a method in C#)
    问题 我有一个游戏框架,其中有一个实现 IBotInterface 的机器人列表。 这些机器人由用户定制,唯一的限制是它们必须实现接口。 然后,游戏为诸如 yourTurn 和 roundStart 之类的各种事件调用机器人中的方法(希望是并行的)。 我希望机器人在被迫退出计算之前只花有限的时间来处理这些事件。 我正在尝试的事情的一个例子是:(其中 NewGame 是代表) Parallel.ForEach(Bots, delegate(IBot bot) { NewGame del = bot.NewGame; IAsyncResult r = del.BeginInvoke(Info, null, null); WaitHandle h = r.AsyncWaitHandle; h.WaitOne(RoundLimit); if (!r.IsCompleted) { del.EndInvoke(r); } } ); 在这种情况下,我被迫运行可能不会终止的 EndInvoke()。 我想不出干净地中止线程的方法。 如果有某种东西就好了 try { bot.NewGame(Info); } catch (TimeOutException) { // Tell bot off. } finally { // Compute things. } 但我认为不可能做出这样的构造。
  • C#中两个项目的循环依赖(Circular Dependency in Two Projects in C#)
    问题 我在一个名为ProjectA(ConsoleApplication)和ProjectB(ClassLibrary)的解决方案中有两个项目。 ProjectA引用了ProjectB。 一般来说,ProjectA会调用ProjectB中的方法来做一些事情并将结果返回给ProjectA。 但是,有时我需要ProjectB向ProjectA发送一些“其他”信息(更具体地说,是在ProjectA中调用Console.WriteLine()方法)。 为此,我需要在ProjectB中引用ProjectA,但是当我尝试这样做时,出现以下错误: A reference to ProjectA could not be added. Adding this project as a reference would cause a circular dependency A reference to ProjectA could not be added. Adding this project as a reference would cause a circular dependency 。 我了解整个耦合概念,并且收到此消息确实很有意义,但是,在某些情况下,我需要向ProjectA发送其他信息。 有任何想法吗? 回答1 我建议您使用事件和侦听器。 例如,您可以通过Trace
  • C# using 语句捕获错误(C# using statement catch error)
    问题 我只是在看 using 语句,我一直知道它的作用,但直到现在还没有尝试使用它,我想出了以下代码: using (SqlCommand cmd = new SqlCommand(reportDataSource, new SqlConnection(Settings.Default.qlsdat_extensionsConnectionString))) { cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("@Year", SqlDbType.Char, 4).Value = year; cmd.Parameters.Add("@startDate", SqlDbType.DateTime).Value = start; cmd.Parameters.Add("@endDate", SqlDbType.DateTime).Value = end; cmd.Connection.Open(); DataSet dset = new DataSet(); new SqlDataAdapter(cmd).Fill(dset); this.gridDataSource.DataSource = dset.Tables[0]; } 这似乎有效,但是这是否有任何意义,因为据我所知,我仍然需要将其包含在
  • 如何使用 Process.Start(“outlook.exe”) 运行 Outlook 并获得控制权(How to run Outlook using Process.Start(“outlook.exe”) and get the control back)
    问题 我的 C# 程序需要启动 Office Outlook 并获取当前的“正在运行的 Outlook 应用程序”。 为了做到这一点,我实现了以下简单程序(因此,如果您愿意,可以简单地对其进行测试): using Outlook = Microsoft.Office.Interop.Outlook; using System.Runtime.InteropServices; static void Main(string[] args) { Outlook.Application outlookObj = null; if (Process.GetProcessesByName("OUTLOOK").Count().Equals(0)) { Process.Start("outlook.exe"); // MY PROGRAM STOPS HERE } var process = Process.GetProcessesByName("OUTLOOK").First(); while (!process.HasExited) { try { outlookObj = (Outlook.Application)Marshal.GetActiveObject("Outlook.Application"); break; } catch { outlookObj = null; }