SSIS Fix: Validation error. The metadata for input column “…..” does not match the metadata for the associated output column.

 

After a schema change in the database I got the error: The metadata for input column “…..” does not match the metadata for the associated output column, on a Union all data flow transformation. To fix this problem:

Right click the "Union All"  > Edit…

Change the "Union All Input 2" value for the specific column to <ignore>:

image

 

Click on OK

Save package

Right click again on the "Union All"  > Edit…

Change the "Union All Input 2" value for the specific column to the correct value:

Click on OK

Save package

The error should be fixed.

The best way to load external JavaScript

I found another post from Nicholas Zakas interesting:

 

The best way to load external JavaScript

http://www.nczonline.net/blog/2009/07/28/the-best-way-to-load-external-javascript/

 

default.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Test page</title>
</head>
<body>
<script type="text/javascript" src="http://your.cdn.com/first.js"></script>
<script type="text/javascript">
loadScript("http://your.cdn.com/second.js", function () {
//initialization code
});
</script>
</body>
</html>

first.js

function loadScript(url, callback) {
var script = document.createElement("script")
script.type = "text/javascript";
if (script.readyState) {  //IE
script.onreadystatechange = function () {
if (script.readyState == "loaded" ||
script.readyState == "complete") {
script.onreadystatechange = null;
callback();
}
};
} else {  //Others
script.onload = function () {
callback();
};
}
script.src = url;
document.getElementsByTagName("head")[0].appendChild(script);
}

The 4 JavaScript load opportunities

Interesting podcast by Scott Hanselman and Nicholas Zakas:

http://hanselminutes.com/383/enough-with-the-javascript-already-with-nicholas-zakas

 

It mentions the 4 JavaScript load opportunities:

  1. In the <head> tag
  2. Before the </body> tag
  3. After page load (windows.onload DOM ready function)
  4. On demand (when user clicks a button, mouse is 100px from button, user types first letter etc.)

 

For performance reasons, use 4, then 3, then 2 and if you can’t do without, use 1.

Fix: The type initializer for ‘Microsoft.DataTransformationServices.Project.SharedIcons’ threw an exception. (Microsoft Visual Studio 2012)

image

 

After some automatic Windows updates, I was unable to open my SSIS projects in Microsoft Visual Studio 2012.

The following error was shown: The type initializer for ‘Microsoft.DataTransformationServices.Project.SharedIcons’ threw an exception.

 

After a google search, I found the following solution at:

http://social.technet.microsoft.com/Forums/en-US/829e1fca-fbbf-43d8-bde5-202ad95e8643/the-type-initializer-for-microsoftdatatransformationservicesdesignsharedicons-threw-an

 

Solution

Download and install http://support.microsoft.com/kb/2861107

SQLServer2012_SP1_CU5_2861107_11_0_3373_x64.

(The hotfix is 780MB, say what?!)

 

image

Using host headers with self hosted ASP.NET SignalR 2.0

If you want to use host headers in development with self hosted ASP .NET SignalR 2.0, you can add the hostheader to your hosts file, found in C:\Windows\System32\Drivers\etc

image

 

Then use the following adjusted client and server from the tutorial at http://www.asp.net/signalr/overview/getting-started/tutorial-signalr-self-host:

 

Server

namespace SignalRSelfHost
{
using System;
using Microsoft.AspNet.SignalR;
using Microsoft.Owin.Hosting;
using Owin;
class Program
{
static void Main(string[] args)
{
// This will *ONLY* bind to localhost, if you want to bind to all addresses
// use http://*:8080 to bind to all addresses. 
// See http://msdn.microsoft.com/en-us/library/system.net.httplistener.aspx 
// for more information.
//string url = "http://localhost:8080";
string url = "http://rlitest.nl";
using (WebApp.Start<Startup>(url))
{
Console.WriteLine("Server running on {0}", url);
Console.ReadLine();
}
}
}
class Startup
{
public void Configuration(IAppBuilder app)
{
var config = new HubConfiguration();
config.EnableJSONP = true;
app.MapSignalR(config);
}
}
public class MyHub : Hub
{
public void Send(string name, string message)
{
Clients.All.addMessage(name, message);
}
}
}

Client

<!DOCTYPE html>
<html>
<head>
<title>SignalR Simple Chat</title>
<style type="text/css">
.container {
background-color: #99CCFF;
border: thick solid #808080;
padding: 20px;
margin: 20px;
}
</style>
</head>
<body>
<div class="container">
<input type="text" id="message" />
<input type="button" id="sendmessage" value="Send" />
<input type="hidden" id="displayname" />
<ul id="discussion"></ul>
</div>
<!--Script references. -->
<!--Reference the jQuery library. -->
<script src="Scripts/jquery-1.6.4.min.js"></script>
<!--Reference the SignalR library. -->
<script src="Scripts/jquery.signalR-2.0.0-rc1.min.js"></script>
<!--Reference the autogenerated SignalR hub script. -->
<script src="http://rlitest.nl/signalr/hubs"></script>
<!--Add script to update the page and send messages.-->
<script type="text/javascript">
$(function () {
//Set the hubs URL for the connection
//$.connection.hub.url = "http://localhost:8080/signalr";
$.connection.hub.url = "http://rlitest.nl/signalr";
// Declare a proxy to reference the hub.
var chat = $.connection.myHub;
// Create a function that the hub can call to broadcast messages.
chat.client.addMessage = function (name, message) {
// Html encode display name and message.
var encodedName = $('<div />').text(name).html();
var encodedMsg = $('<div />').text(message).html();
// Add the message to the page.
$('#discussion').append('<li><strong>' + encodedName
+ '</strong>:&nbsp;&nbsp;' + encodedMsg + '</li>');
};
// Get the user name and store it to prepend to messages.
$('#displayname').val(prompt('Enter your name:', ''));
// Set initial focus to message input box.
$('#message').focus();
// Start the connection.
$.connection.hub.start({ jsonp: true }).done(function () {
$('#sendmessage').click(function () {
// Call the Send method on the hub.
chat.server.send($('#displayname').val(), $('#message').val());
// Clear text box and reset focus for next comment.
$('#message').val('').focus();
});
});
});
</script>
</body>
</html>

ASP.NET SignalR self hosting: Fixing the error XMLHttpRequest cannot load http://localhost:8080/signalr/negotiate…. Origin http://localhost:52947 is not allowed by Access-Control-Allow-Origin.

image

 

If you follow the tutorial http://www.asp.net/signalr/overview/getting-started/tutorial-signalr-self-host to the letter, you will end up with an error:

 

XMLHttpRequest cannot load http://localhost:8080/signalr/negotiate?connectionData=%5B%7B%22name%22%3A%22myhub%22%7D%5D&clientProtocol=1.3&_=1378817568655. Origin http://localhost:52947 is not allowed by Access-Control-Allow-Origin. Default.html:1

 

The solution can be found on

http://stackoverflow.com/questions/18471853/cross-domain-requests-not-working-in-signalr-2-0-0-rc1

 

The server should look like:

 

namespace SignalRSelfHost
{
using System;
using Microsoft.AspNet.SignalR;
using Microsoft.Owin.Hosting;
using Owin;
class Program
{
static void Main(string[] args)
{
// This will *ONLY* bind to localhost, if you want to bind to all addresses
// use http://*:8080 to bind to all addresses. 
// See http://msdn.microsoft.com/en-us/library/system.net.httplistener.aspx 
// for more information.
string url = "http://localhost:8080";
using (WebApp.Start<Startup>(url))
{
Console.WriteLine("Server running on {0}", url);
Console.ReadLine();
}
}
}
class Startup
{
public void Configuration(IAppBuilder app)
{
var config = new HubConfiguration();
config.EnableJSONP = true;
app.MapSignalR(config);
        }
}
public class MyHub : Hub
{
public void Send(string name, string message)
{
Clients.All.addMessage(name, message);
}
}
}

and the client should look like:

 

<!DOCTYPE html>
<html>
<head>
<title>SignalR Simple Chat</title>
<style type="text/css">
.container {
background-color: #99CCFF;
border: thick solid #808080;
padding: 20px;
margin: 20px;
}
</style>
</head>
<body>
<div class="container">
<input type="text" id="message" />
<input type="button" id="sendmessage" value="Send" />
<input type="hidden" id="displayname" />
<ul id="discussion"></ul>
</div>
<!--Script references. -->
<!--Reference the jQuery library. -->
<script src="Scripts/jquery-1.6.4.min.js"></script>
<!--Reference the SignalR library. -->
<script src="Scripts/jquery.signalR-2.0.0-rc1.min.js"></script>
<!--Reference the autogenerated SignalR hub script. -->
<script src="http://localhost:8080/signalr/hubs"></script>
<!--Add script to update the page and send messages.-->
<script type="text/javascript">
$(function () {
//Set the hubs URL for the connection
$.connection.hub.url = "http://localhost:8080/signalr";
// Declare a proxy to reference the hub.
var chat = $.connection.myHub;
// Create a function that the hub can call to broadcast messages.
chat.client.addMessage = function (name, message) {
// Html encode display name and message.
var encodedName = $('<div />').text(name).html();
var encodedMsg = $('<div />').text(message).html();
// Add the message to the page.
$('#discussion').append('<li><strong>' + encodedName
+ '</strong>:&nbsp;&nbsp;' + encodedMsg + '</li>');
};
// Get the user name and store it to prepend to messages.
$('#displayname').val(prompt('Enter your name:', ''));
// Set initial focus to message input box.
$('#message').focus();
// Start the connection.
$.connection.hub.start({ jsonp: true }).done(function () {
$('#sendmessage').click(function () {
// Call the Send method on the hub.
chat.server.send($('#displayname').val(), $('#message').val());
// Clear text box and reset focus for next comment.
$('#message').val('').focus();
});
});
});
</script>
</body>
</html>